4

オプションの型パラメーターを持つクラスを作成したい場合は、次のようにすることができます。

template<typename T>
struct X
{
        T t;
};

template<>
struct X<void>
{

};

int main()
{
        X<int> a;
        X<void> b;
};

ボイドが不要になるように書く方法はありますか?すなわち:

int main()
{
        X<int> a;
        X b;
};

私はこれを試しました:

template<typename T = void>
struct X
{
    T t;
};

template<>
struct X<void>
{

};

int main()
{
    X<int> a;
    X b;
};

しかし、私は得る:

test.cpp: In function ‘int main()’:
test.cpp:16:4: error: missing template arguments before ‘b’
test.cpp:16:4: error: expected ‘;’ before ‘b’
4

2 に答える 2

4

技術的には次のように書く必要があります。

X<> b;

しかし、typedefを使用してその醜さを簡単に修正できます。

typedef X<> Y;

そして、あなたは次のことができます:

Y b;
于 2012-12-24T03:18:03.380 に答える
1

これが可能だった場合:

template <typename T>
using X = std::is_void<T>::value ? _X<> : _X<T>

しかし、これはコンパイルされないので、残念ながらtypedef、他の答えのように立ち往生しています。

于 2012-12-27T01:09:52.313 に答える