【发布时间】:2019-10-17 13:40:58
【问题描述】:
我有一些 CRTP 依赖项,我不确定如何解决。理想情况下,我想在基类中放入尽可能多的东西,比如函数,所以我不必为每个继承它们的类重新定义它们。这似乎会导致初始化顺序出现问题,其中result_type 取决于尚未初始化的类型。这是一个例子:https://godbolt.org/z/YpfcPB
这里是代码:
template<typename T>
struct CRTP_Derived;
template<typename Derived>
struct CRTP
{
using result_type = typename Derived::result_type;
};
template<typename T>
struct CRTP_Derived : public CRTP<CRTP_Derived<T>>
{
using result_type = T;
};
int main()
{
CRTP_Derived<int> a;
return 0;
}
【问题讨论】:
-
“初始化”在这里不是正确的词。这个问题与一个类类型何时被认为是完整的有关。
-
@aschepler 然后实例化?如果我可以定义顺序,我就不会有问题。这就是 traits 的真正作用——它将
result_type推迟到以后。