c++ - 将类型名称传递给模板化运算符

标签 c++ templates operator-overloading implementation rvalue

我知道有相同主题的问题,但这个问题要求更具体。

我正在创建个人使用的多类型模板化容器。细节并不重要,但这里是我想在我的容器中使用的基本运算符:

  • obj[n] 返回自己的类型,因此它可以用于分配值,如 obj[n]=value;(作为左值)

  • 重载 obj[n] 返回存储在“数组”中的检索值,如 something=obj[n];(作为右值)

第二个重载运算符是我要说的。

使用一个极小的示例,这是我的类的基本外观:

template <typename T1, typename T2>
class example
{
    /*some private and public definitions*/

    example<T1, T2>& operator[] (int n)
    {
        current = n;
        return *this;
    }

    template <typename U>
    U operator[] (int n)
    {
        /*some operations*/

        return something;
    }
};

问题是,我想参数化重载运算符的返回值。

我在这里读到关于 stackoverflow 的一个问题,只有通过“显式显式”调用运算符才能做到这一点。

我的问题是,我该如何解决这个问题,这样如果我不能参数化一个普通的运算符调用,至少可以以不同的方式实现我的右值运算符 [] 以实现我想要实现的目标?

最佳答案

您的代码中有两个运算符可能会重载。 [] 运算符和 = 运算符。您可以重载 [] 以将右值返回给特殊类,然后根据该类是出现在运算符的左侧还是右侧为该特殊类重载 = .

关于c++ - 将类型名称传递给模板化运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41755183/

相关文章:

Android:Vulkan 层已停止在设备上运行

c++ - 合并排序输出问题

C++ 模板和 Unsigned long 问题

C++ 基本多线程故障排除

c++ - 图灵机 : But why use template metaprogramming?

C++ 如何将对象指针发送到函数(对指针列表进行排序)

c++ - 将 std::set 保存在 std::list 中

c++ - C++11 中 unique_ptr 的延迟初始化

c# - 后增量运算符重载

Python 运算符重载和运算符结合性