我有一个模板功能,并在一个点上,我想这取决于模板参数有不同的代码:分支函数中的模板参数?
template <typename T>
void function(const T ¶m) {
// generic code here...
// pseudo-code:
if constexpr isinstance(param, Banana) {
param.peel();
} else if constexpr isinstance(param, Apple) {
// do nothing, Apple has no method `peel`
}
}
我不想专门整体功能,因为大部分代码共享。我想插入的语句是一个临时调试措施。我知道正确的做法是创建一个重载函数doPeel
而改为调用:
void doPeel(const Banana ¶m) { param.peel(); }
void doPeel(const Apple ¶m) {}
但我很好奇,有没有办法告诉在编译时,在一个函数,什么(模板特)键入一个给定的变量是...为了使用只能编译一种类型的语句?
我不知道constexpr
之类的东西是否可能 - 或者编译器是否在丢弃的分支中执行类型?我也尝试用lambda表达式来定义lambda表达式 - 为两种情况定义lambda表达式,并且只调用一个lambda表达式,但是我找不到办法做到这一点。有任何想法吗?
嗯我想它会花费比C + + 11最小的变化更多,因为你依靠通用lambdas推迟解析的lambda身体,不是? –
@LightnessRacesinOrbit这是真的,我没有想到通过 – krzaq