【发布时间】:2014-07-08 09:32:03
【问题描述】:
假设我有这样的模板函数
template <typename T> bool func(T a)
{
if(a.X())
return a.Y();
return false;
}
现在我用作该函数参数的每个类都有函数 X(), 但并非我用作参数的每个类都具有函数 Y()。 但是,如果函数 a.X() 返回 true,那么我保证给定的类具有函数 Y()。我可以以某种方式编译这段代码吗,因为我知道编译器抱怨某些类型丢失的函数 Y() 永远不会被调用?这个函数实际上非常大,而且使用的类型很多,所以做一些专门化是不切实际的。
【问题讨论】:
-
这只有在
T::X()可以在编译时评估并且a在编译时已知,但涉及一些模板bla bla 时才有效。请澄清是否是这种情况!如果不是这种情况,那么您无法在编译时检测到T::X()返回 true,但T::Y()不存在的情况。但是,您可以在运行时强制执行此操作。 -
if (a) return b; return false;是一种复杂的写法return a and b;。