コンパイル時に(実際にプログラムをコンパイルして実行する前に)その引数の値がわかっているか不明である場合のテンプレート関数を特化する方法はありますか?コンパイル時に変数の値がわかっているかどうか分からない場合
私はまだどのように把握できません。
アイデア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.
なぜdownvote? "これはできません"は受け入れられる答えです。 –
私があなたを正しく理解していれば、これはconstexprのオーバーロードを必要とします。 - [できません。](@stackoverflow.com/a/33192804/1968) –
@Konrad Rudolph。その答えを正しく読めば、関数は 'constexpr'引数を持つことができないと言います。私は 'constexpr'を再定義するのではなく、特性による専門化について考えています。 –