0

また行き詰まりました…

私はこのテンプレートクラスを持っています:

template <typename a,typename b,typename c>
class myclass
{...};

このクラスのオブジェクトを宣言したいと思います:

myclass<a,b,c> x;

これは明らかに機能せず、このオブジェクトを宣言する方法、またはそれが可能であるかどうかを判断できないようです。

次のようなオブジェクトを作成できます。

myclass<int,double,int> x;

しかし、a、b、c の型を指定したくありません。

4

3 に答える 3

1

引数のスペルを明示せずに複雑なテンプレート インスタンスを作成する一般的な方法は、型推定関数テンプレートを使用することです。

template <typename A, typename B, typename C>
myclass<A, B, C> make_myclass(A a, B b, C C)
{
    return myclass<A, B, C>();   // or whatever
}

使用法:

auto x = make_myclass(1, 'x', -2.5f);   // x is a myclass<int, char, float>

このイディオムを使用する標準ライブラリの典型的な例はmake_shared、、、、、およびです。make_uniquemake_pairmake_tuplemake_exception_ptrmake_optional

于 2013-10-10T21:15:39.317 に答える
0

C++ には型に依存しないオブジェクトはありません。すべてのオブジェクトは、宣言時に型指定する必要があります。型消去を実現する唯一の方法は、ブースト型消去void*から見つけることができる、ポインター変換のような手法を使用することです。

于 2013-10-10T21:14:33.897 に答える
0

私があなたを正しく理解していれば、テンプレート関数またはクラスで宣言する必要があります。

template <typename a,typename b,typename c>
void F(){
   myclass<a,b,c> x;
   ...
}

それ以外の場合は、C++ およびロジックによって禁止されています。

于 2013-10-10T21:13:43.837 に答える