Я пытаюсь реализовать шаблон Curily Recurring Template Pattern в C ++, но не могу заставить его работать.Может кто-нибудь указать, что не так с моим кодом?
template <typename T>
struct Base {
int x;
Base():x(4){}
};
struct Derived: Base<Derived> {
Derived(){}
};
template<typename H>
void dosomething(Base<H> const& b) {
std::cout << b.x << std::endl;
}
int main() {
Derived k();
dosomething(k);
}
Я пытаюсь сохранить сигнатуру dosomething так, как есть, чтобы любой класс, реализующий методы в Base, можно было использовать в dosomething ().
Это ошибка, которую я получаю:
||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
In function ‘int main()’:
error: no matching function for call to ‘dosomething(Derived (&)())’
note: candidate: template<class H> void dosomething(const Base<H>&)
note: template argument deduction/substitution failed:
note: mismatched types ‘const Base<H>’ and ‘Derived()’
Почему я получаю эту ошибку?Разве компилятор не должен обрабатывать k как константную ссылку при вызове dosomething ()?