0

テンプレート型のメンバー関数を呼び出す良い方法は何ですか? 以下のコードは、関数が定義されfoo()ている型に対してのみコンパイルされますか?bla()

class A { void bla(); };

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

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

メソッドboost::enable_ifを持つ型に対してのみこの関数を定義するために使用できますか? bla()はいの場合、それは良い考えですか?ここで使用する必要があるのは、おそらく「概念」(私はそれについて何も知りません) のアイデアだと思います。

4

3 に答える 3

2

foo 関数を呼び出そうとするすべての型に対して、コンパイラは指定されたそれを使用して新しい foo 関数を生成し、コンパイルします。指定された型で foo 関数をコンパイルできる場合、それは機能します。

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

于 2011-06-19T20:34:09.540 に答える
1

あなたのコード サンプルは正しいように見えます。bla()もちろん、メンバーを持たない型でインスタンス化するとエラーになります。

于 2011-06-19T20:31:08.963 に答える
1

また、デフォルトで構築可能な型に対してのみコンパイルされます。bla()コンパイラは、デフォルトで構築可能でなく、引数を受け入れない関数を持たない型に対してエラーをスローします。

于 2011-06-19T20:33:28.573 に答える