我通过使用 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;
}
我想我必须让 Base 类和 Implemented 类都知道 main() 中 S 的实际类型。我该如何解决这个问题?感谢您提前提供的帮助。
最佳答案
在这一行中:
Base<Implemented, int> x;
Implemented
不再是一种类型,现在您将其设为模板。但是 Base
仍然需要一个类型 - 所以给它一个:
Base<Implemented<int>, int> x;
关于c++ - 将模板类型名添加到两个模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058229/