2016-11-29 2 views
1

関数に渡されるパラメータから推論可能な型テンプレートパラメータと型以外のテンプレートパラメータの両方を持つテンプレート関数を作成したい明示的に配置されます。コンパイラがそれぞれの型を推測できるようですが、非型のテンプレートパラメータを指定すると、すべてのテンプレートパラメータが必要になります。非型テンプレートパラメータを指定することはできますか?非型パラメータを明示的に指定し、型パラメータを暗黙的に指定してテンプレート関数を呼び出す

#include <iostream> 
#include <typeinfo> 

template <typename T, bool bPrint=true> 
void f(T var) { 
    if (bPrint) 
    std::cout << typeid(var).name() << std::endl; 
} 

int main() { 
    f(3); //works 
    f<false>(3); //error: template argument deduction/substitution failed 
} 
+0

テンプレートパラメータは、インスタンス間の宣言とまったく同じ順序でテンプレートに渡す必要があります... –

答えて

3

テンプレートのパラメータは、引数リストの最後にある必要がありますが、推測してください。あなたの関数テンプレートのパラメータを並べ替えることにより、あなたのコードのコンパイルを行うことができます。

template < bool bPrint=true, typename T> 
void f(T var) { 
    if (bPrint) 
    std::cout << typeid(var).name() << std::endl; 
} 

demo

関連する問題