2011-06-19 9 views
0

テンプレートタイプのメンバー関数を呼び出すにはどうすればよいですか? foo()コードは、bla()関数が定義されている型に対してのみコンパイルされますか?特定のメンバーメソッドを持つC++テンプレートタイプ

class A { void bla(); }; 

template<typename T> 
void foo() { 
    T t; 
    t.bla(); 
} 

int main() { 
    foo<A>(); 
    return 0; 
} 

は私だけbla()メソッドを持っているタイプのために、この関数を定義するためにboost::enable_ifを使用することはできますか?はいの場合は、いいアイデアですか?私は "概念"(私は何も知らない)のアイデアはおそらくここで使われる必要があると想像しています。

答えて

2

foo関数を呼び出そうとするすべての型に対して、コンパイラは指定されたfoo関数を指定してコンパイルし、指定された型のfoo関数をコンパイルできればコンパイルします。

したがって、foo関数は、bla関数を持ち、デフォルトのコンストラクタを持つすべての型で機能します。

1

コードサンプルが正しく表示されます。もちろん、bla()のメンバーを持たないタイプでインスタンス化するとエラーになります。

1

また、デフォルトで構成可能なタイプの場合にのみコンパイルされます。コンパイラは、デフォルトコンストラクタブルではなく、引数を受け入れることができないbla()関数を持たないすべての型に対してエラーをスローします。

関連する問題