【发布时间】:2019-05-05 17:14:35
【问题描述】:
我有一个使用 CRTP 的非常简单的类:
template <typename DerivedType, void (DerivedType::*updateMethod)() = &DerivedType::update>
class UpdatableBase {};
class MyClass : private UpdatableBase<MyClass> {
public:
void update() {
}
};
int main() {
return 0;
}
当使用g++ test.cpp -std=c++14 编译时,会给出:
test.cpp:2:85: error: no member named 'update' in 'MyClass'
template <typename DerivedType, void (DerivedType::*updateMethod)() = &DerivedType::update>
~~~~~~~~~~~~~^
test.cpp:5:25: note: in instantiation of default argument for 'UpdatableBase<MyClass>' required here
class MyClass : private UpdatableBase<MyClass> {
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
为什么会说“‘MyClass’中没有名为‘update’的成员”?很明显。
【问题讨论】:
-
好吧,在您的模板实例化时
MyClass是不完整的,并且它没有update方法...根据您想要完成的内容,您可能需要一些间接性。 -
好的。有没有办法我可以接受一个方法作为参数,同时仍然具有默认值?