0

私はそのようなテンプレートクラスメソッドを持っています:

template<class T>
static tmpClass<T>* MakeInstance(T value)
{

  tmpClass<T> *pointer = new tmpClass<T>(value);

  return pointer;
}

そして、このメソッドを呼び出すためにさまざまな方法を使用しました。

方法 1:

MakeInstance<int>(val); // This is OK.

方法 2:

MakeInstance(int val); // ERROR: Expected '(' for function-style cast or type construction

方法 3:

MakeInstance(int (val)); // This is also OK.

方法 4:

MakeInstance(int, (val)); // The same issue with way 2

方法 5:

MakeInstance((int), (val)); // ERROR: Expect expression with ","

方法 6:

MakeInstance((int) val); // This is also OK.

方法 7:

MakeInstance<int val>; // ERROR: Expected ">"

では、方法 1、3、6 に違いはありますか? テンプレートに厳密に従わなければならないという理由だけで、「,」を使用して「T」と「値」を分割できないのはなぜですか? しかし、なぜ "<>" に "T" を含めることができるのでしょうか?

4

1 に答える 1

1

指定したタイプでテンプレート関数を呼び出すこと #1明示的に指定します。

#3#6で呼び出される関数は、関数テンプレートの引数の演繹によって決定されますintキャストはコンパイラーに、テンプレート関数を使用して生成する関数を見つけることができないため、 取る関数を探すように指示します。

cスタイルのキャストに注意してください。

T(val);

val(T);

どちらも同一であり、同じ意味です。

于 2012-06-18T04:50:31.130 に答える