如果在编译时已知/未知变量的值,则进行专门化

时间:2016-09-28 09:11:26

标签: c++ templates metaprogramming

如何在编译时(实际编译和运行程序之前)知道/未知其参数之一的值的情况下专门化模板函数?

我无法弄清楚是怎么回事。

想法1:

#include <type_traits>
#include <iostream>
int main(void){
    int a; //value of a is not known at compile time
    bool b = (a == a); //value of b is known at compile time.
    std::is_assignable< constexpr bool, bool >::value
}
//g++ magic.cpp -std=c++14
//error: wrong number of template arguments (1, should be 2)
// std::is_assignable< constexpr bool, bool >::value

创意2:

#include <type_traits>
#include <iostream>
int main(void){
    const int a=1;
    int b = (a == a);
    std::cout <<  __builtin_constant_p (a)  << std::endl;
    std::cout <<  __builtin_constant_p (b)  << std::endl;
}
//prints 0 and 0.

1 个答案:

答案 0 :(得分:1)

好吧,我猜你的意思是参数的类型,对吗?对于部分模板专业化而言,价值观并不重要......

然后:这无法完成。

模板的参数类型必须在编译时知道。编译器还应该如何生成正确的代码?

对于部分模板特化,由于同样的原因,必须在编译时知道这些类型。