【发布时间】:2012-09-18 16:33:51
【问题描述】:
关于 adanve 的注意事项:也接受 C++11,但首选 C++99。请不要用虚函数回答,请只用模板!
我想建模的是典型的“A 和 B 暗示 C”情况。我有一些 C++ 类和一些描述它们属性的模板。示例:
template<typename S, typename T, typename U>
class Base
{
MaybeTruePropertyA<S,T> a;
MaybeTruePropertyB<S,T,U> b;
MaybeTruePropertyC<S,T,U> c;
};
假设我是这样继承的:
template<typename S, typename T, typename U>
class Inherited : public Base<S,T,U>
{
TruePropertyA<S,T> a;
TruePropertyB<S,T, U> b;
};
然后我希望 神奇地 将 PropertyC 设置为 Inherited 中的 TrueProperty。
现在,这是我的问题:
- 我不知道如何神奇地做到这一点。
- 另外,我认为在 Inherited 中隐藏
MaybeTruePropertyA是浪费内存。
有没有人解决我如何用上面的属性做一些“A 和 B 暗示 C”?您可以更改一些内容,但属性仍应表示为 TrueProperty<S,T> a。
一个不太抽象的例子可以在这里找到:http://pastebin.com/M209CJp4
【问题讨论】:
-
附带说明,MaybeTruePropertyA,B,C 在 Base 中是私有的,因此在 Inherited 中看不到。其次,我不明白“希望神奇地将 PropertyC 设置为继承中的 TrueProperty”是什么意思。但更重要的是,您不需要在 Inherited 中“隐藏”MaybeTruePropertyA,因为它已经隐藏了
-
Base可以有模板参数吗?
-
我很确定你需要的任何事情都可以通过一些简单的特征检查(例如
std::is_base_of)来完成,但我不太了解这里的确切要求...... -
"您可以添加任意数量的模板。"在这里说这种话很危险。 :-O
-
您的伪代码及其附带的描述有一些问题,即没有
PropertyC,您不能使用S和其他作为模板参数。以前有人问过,但我觉得我必须坚持:你能用英语表达你的要求吗?或者可能使用不显示Base和Inherited实现的简单代码表达式?