【发布时间】:2016-10-09 14:58:15
【问题描述】:
我知道如何pass template function as template argument,我现在正努力以类似的方式传递变量模板。
这是我尝试过的最小示例:
#define PASS_VARIABLE_TEMPLATE(name) [dummy=nullptr](auto&&...args) \
{return name<decltype(args)...>;}
//testing
template <typename T>
bool value = std::is_fundamental<T>::value;
template <typename Hax>
void print_bool(Hax h)
{
std::cout << h(int{}) << std::endl; // no error, wrong output
//std::cout << h(int{}, float{}) << std::endl; // error, good
}
int main()
{
print_bool(PASS_VARIABLE_TEMPLATE(value)); //prints 0 instead of 1
}
如果可以编译,那为什么输出错误?
【问题讨论】:
-
参考足够好吗?
-
@lorro 哦,傻我,忘了做腐烂!但另一方面,这会破坏引用/指针检查......也应该可以检查这种情况:
int b; int& ref = a; h(ref); //type is int& -
你会得到预期的结果
#define PASS_VARIABLE_TEMPLATE(name) [dummy=nullptr](auto&&args) { return name<typename std::remove_reference<decltype(args)>::type>; } -
@SamVarshavchik 是的,但另一方面,如果改为应用
std::is_rvalue_reference,它不会中断吗?
标签: c++ templates lambda c++14 variable-templates