【发布时间】:2010-06-30 17:37:59
【问题描述】:
我在 C 类中有一个方法 foo,它调用 foo_1 或 foo_2。 这个方法 foo() 必须在 C 中定义,因为 foo() 在 BaseClass 中是纯虚拟的,我实际上 必须制作 C 类型的对象。代码如下:
template <class T>
class C:public BaseClass{
void foo() {
if (something()) foo_1;
else foo_2;
}
void foo_1() {
....
}
void foo_2() {
....
T t;
t.bar(); // requires class T to provide a method bar()
....
}
};
现在对于大多数类型 T foo_1 就足够了,但对于某些类型 foo_2 将被调用 (取决于某事())。然而,编译器坚持实例化 foo_1 和 foo_2 因为两者都可能被调用。
这给 T 带来了它必须提供的负担 一个酒吧方法。
我如何告诉编译器以下内容:
- 如果 T 没有 bar(),仍然允许它作为实例化类型吗?
【问题讨论】:
-
我的意思是 foo() 在 BaseClass 中是纯虚拟的。
-
@and 他的班级名称是'C'。我不认为他指的是 C 语言。
-
什么是
something()?它是一些编译时常量吗? -
@Georg:在运行时没有评估任何东西()。
-
@Georg +1。如果是,那将是一个非常容易应用的解决方案。
标签: c++ templates instantiation