の1つまたは2つの引数をデリゲートと呼ぶことができるC++の「イベント」クラスを使用しています。
最近、引数を必要としないデリゲートのサポートを追加しましたが、テンプレート引数を使用しないようにクラスを特殊化する場合でも、クラス定義の後に<>を追加する必要があります。
1つまたは2つの引数を使用した使用例:
class Example
{
public:
event<int> SingleArgEvent;
event<int, int> DoubleArgEvent;
};
そしてここに引数なしの例:
class Example
{
public:
event<> NoArgTest1; // compiles just fine
event NoArgTest2; // gives me C2955: 'event' : use of class template requires template argument list
};
角かっこで動作するので、角かっこが必要な理由がわかりません。クラス特殊化コードは次のとおりです。
class null_typelist {};
/** event template **/
template <class Targ1 = null_typelist, class Targ2 = null_typelist>
class event : public event2_base<Targ1, Targ2>
{
};
template <class Targ>
class event<Targ, null_typelist> : public event1_base<Targ>
{
};
template <>
class event<null_typelist, null_typelist> : public event0_base
{
};