【发布时间】:2014-09-23 05:16:31
【问题描述】:
提供编译时分支的技术/c++ 语言工具-特性有哪些?
第一次尝试枚举它们(我期待添加更正):
-
重载解决方案:例如选择“最佳”版本适合提供的参数
void F(X& arg); void F(X&& arg); -
模板专业化:创建为“特殊参数”运行的代码——一种对模板元编程和编译时递归至关重要的技术
template<int N> struct A { /* implementation */ }; template<> struct A<0> { /* specific code */ }; -
SFINAE 和表达式 sfinae:(1) 的一个特例,它提供了条件接口的工具。
template<class C, class F> auto test(C c, F f) -> decltype((c->*f)(), void()); // 'C' is pointer type
【问题讨论】:
-
一个带有编译时表达式的简单
if语句怎么样? -
SFINAE 更多的是编译时布尔表达式,而不是编译时分支。
-
@NPE: 我不认为
if语句可以被认为是编译时分支,因为if的两个分支都需要编译,即使if有一个常量表达式参数。 -
@Mankarse 一般来说是的,但是在优化的构建中,可以消除死代码。
-
编译时可以使用条件运算符:
int b[17 >= 12 ? 2 : 4];.
标签: c++ templates c++11 template-meta-programming overload-resolution