【发布时间】:2016-05-15 22:32:08
【问题描述】:
我正在尝试执行以下操作:
template <class T>
void foo(T * ptr){
...a lot of code ...
if(std::is_base_of<Bar<T>,T>::value){
Bar<T> & bar = *ptr;
...a lot of code ...
}
...a lot of code
}
如果我使用 Bar 的子类来编译这个函数,一切正常,但是如果我尝试使用 which isnt 进行编译,我会在
Bar<T> & bar = *ptr;
线。
这是怎么回事,因为当 T 不是 Bar<T> 的子类时,不应执行此行?
如果这不是常见的方法,我该如何以正确的方式实现呢?
【问题讨论】:
-
“未执行”与“未编译”不同。
-
它是一个模板,编译器必须为它生成代码,即使有一个条件会停止模板初始化。
-
啊,我明白了。但我怎样才能以正确的方式做到这一点?
-
一种方法是使用
enable_if。