0
我想创建一个基类与函数,当继承时,返回子类的实例。什么我目前想摘要版:CRTP和函数,返回派生类型的一个实例
A.H:
#include <string>
template <typename Derived>
class A {
public:
A<Derived>();
Derived Append(wchar_t the_char) const;
protected:
std::wstring some_string;
} // class A
A.cpp:
#include "A.h"
A<class Derived>::A() {}
Derived A::Append(wchar_t the_char) const
{
Derived d(some_string);
d.some_string += the_char;
return d;
}
B.h:
class B : public A<B>
{
public:
B();
};
B.cpp:
B::B() : A() {}
我希望能够用这个做的是类似如下:
B theObj;
theObj = theObj.Append(L'h');
不过,我无法找到组织的一种方式代码来实现这一点。我不确定是否有某种形式的前向声明需要在这里或什么。尝试了几件事,但没有运气。思考?
可能你正在寻找这个:http://stackoverflow.com/a/11761568/1726343 –
@AsadSaeeduddin那么,我想返回的东西不是一个指针或对现有对象的引用,而是一个副本修改应用于堆栈上的该对象。我也正在使用现有的代码库,所以我不想在整个解决方案中进行操作,并更改类的使用方式的语义。我只想有一个基类,我可以用它来分享相似但不相同的子类之间的代码。 我发布的代码的问题是,在编译代码时,“派生”被认为是未定义的。 – ShiggityShiggityShwa
@ShiggityShiggityShwa http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file –