Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CRTP:返回对派生类的引用?_C++_Casting_Operator Overloading_Crtp - Fatal编程技术网

C++ CRTP:返回对派生类的引用?

C++ CRTP:返回对派生类的引用?,c++,casting,operator-overloading,crtp,C++,Casting,Operator Overloading,Crtp,为了使CRTP解决方案正常工作,我必须用什么来替换丢失的行 template<class Crtp> class Base { public: inline Crtp& operator=(const Base<Crtp>& rhs) { for (unsigned int i = 0; i < const_size; ++i) { _data[i] =

为了使CRTP解决方案正常工作,我必须用什么来替换丢失的行

template<class Crtp> class Base
{
    public:
        inline Crtp& operator=(const Base<Crtp>& rhs)
        {
            for (unsigned int i = 0; i < const_size; ++i) {
                _data[i] = rhs._data[i];
            }
            return /* SOMETHING HERE BUT WHAT ? */
        }

    protected:
        static const unsigned int const_size = 10;
        double _data[const_size];
};

class Derived : public Base<Derived>
{
};
模板类基类
{
公众:
内联Crtp和运算符=(常数基和rhs)
{
for(无符号整数i=0;i
其他问题:您将提供的解决方案在运行时是否有成本(与直接在派生类中实现运算符的解决方案相比)

非常感谢。

返回静态\u cast(*此);
return static_cast<Crtp&>(*this);
这在运行时没有成本(但您可能希望保护
Base
的构造函数)。

返回static\u cast(*This);

这在运行时没有成本(但您可能希望保护
Base
的构造函数)。

简单地
static\u cast
it?简单地
static\u cast
it?与“*static\u cast(This)”有区别吗?(我没试过)?Base有一个公共构造函数这一事实是否可以改变解决方案在运行时没有成本的事实(或者只是为了确保Base将被用作一个抽象类)?@Vincent,几乎没有什么区别,至少在实践中是这样的。至于第二个问题:后者。@Vincent,因为您返回的是一个引用,而不是指向引用的指针。构造函数与此无关,因为引用不会创建新对象。@Mark:在强制执行static_cast之前有一颗星星:*static_cast(这个)@Vincent,很抱歉我错过了它-它与引用混合在一起。是的,它将是相同的。与“*静态_cast(this)”有区别吗?(我没试过)?Base有一个公共构造函数这一事实是否可以改变解决方案在运行时没有成本的事实(或者只是为了确保Base将被用作一个抽象类)?@Vincent,几乎没有什么区别,至少在实践中是这样的。至于第二个问题:后者。@Vincent,因为您返回的是一个引用,而不是指向引用的指针。构造函数与此无关,因为引用不会创建新对象。@Mark:在强制执行static_cast之前有一颗星星:*static_cast(这个)@Vincent,很抱歉我错过了它-它与引用混合在一起。是的,它是一样的。