我已經通過在C++上使用模板技術學習了此代碼,如繼承一樣。此代碼有效。將模板類型名稱添加到兩個模板類
#include <iostream>
using namespace std;
template < typename T >
class Base {
public:
explicit Base(const T& policy = T()) : m_policy(policy) {}
void doSomething()
{
m_policy.doA();
m_policy.doB();
}
private:
T m_policy;
};
class Implemented {
public:
void doA() { cout << "A"; };
void doB() { cout << "B"; };
};
int main() {
Base<Implemented> x;
x.doSomething();
return 0;
}
但是,是否可以在doA和doB中添加帶有新類型名稱S的參數?例如,此代碼不能通過類型/值不匹配錯誤工作。
#include <iostream>
using namespace std;
template < typename T, typename S >
class Base {
public:
explicit Base(const T& policy = T()) : m_policy(policy) {}
void doSomething()
{
m_policy.doA(m_s);
m_policy.doB(m_s);
}
private:
T m_policy;
S m_s;
};
template < typename S >
class Implemented {
public:
void doA(S& s) { cout << "A" << s; };
void doB(S& s) { cout << "B" << s; };
};
int main() {
Base<Implemented, int> x;
x.doSomething();
return 0;
}
我想我必須讓class Base和Implemented知道在main()的S的實際類型。我該如何解決這個問題?提前謝謝你的幫助。
非常感謝!起初,我認爲我必須使用模板的模板,但我不知道如何寫。這也適用於以上答案。 – 2015-01-21 11:54:02