我是新來的C++模板,所以忍耐着我。C++內聯模板策略功能
我想要做的是在我的課堂上通過使用模板化函數實現某種策略模式。我認爲這將嵌入戰略。
我的理解是,這可以通過函數來實現,但我不想引入新的類,我只想在我的類中內聯策略函數。
可以說我有一個類Calculator
。
Calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator
{
public:
Calculator();
virtual ~Calculator();
typedef void (*Strategy)(int param1, int param2);
void add(int param1, int param2);
template<class T>
void doStrategy(T strategy, int param1, int param2);
protected:
private:
};
#endif
Calculator.cpp
Calculator::Calculator()
{
//ctor
}
Calculator::~Calculator()
{
//dtor
}
void
Calculator::add(int param1, int param2)
{
std::cout << "Sum " << param1+param2 << std::endl;
}
template<class T>
void
Calculator::doStrategy(T strategy, int param1, int param2)
{
strategy(param1,param2);
}
的main.cpp
int main()
{
Calculator calc = Calculator();
calc.doStrategy<Calulator::Strategy>(calc.add,2,3);
return 0;
}
這種失敗
error: no matching function for call to ‘Calculator::doStrategy(<unresolved overloaded function type>, int, int)’|
note: candidate is:|
note: template<class T> void Calculator::doStrategy(T, int, int)|
note: template argument deduction/substitution failed:|
note: cannot convert ‘calc.Calculator::add’ (type ‘<unresolved overloaded function type>’) to type ‘void (*)(int, int)’|
==後來編輯==
的main.cpp
typedef void (Calculator::*Strategy)(int, int);
int main()
{
Calculator calc = Calculator();
Strategy strategy = &Calculator::add;
calc.doStrategy<Strategy>(strategy,2,3);
return 0;
}
仍未有:
undefined reference to `void Calculator::doStrategy<void (Calculator::*)(int, int)>(void (Calculator::*)(int, int), int, int)'
看看這個鏈接,您的最新錯誤的原因:http://www.parashift.com/c++-faq/separate-template-fn-defn-from-decl html的 – JaredC