0

2 つのメソッドを実装していないテンプレートがあります。

テンプレートの仕様であるクラスのみを使用したいので、仕様を提供します。

例:

template<class T> class Temp
{
  void Method1();
};

Temp<int>::method1() {...}

ここで、次のような仕様のテンプレート タイプを提供したいと思います。

template<class General> void Temp<General> method1() {...}

そして、どのタイプがGeneral.

C++ 構文でどのように行うことができますか?

4

1 に答える 1

1

既知のタイプのリストに一連の特殊化を提供したいようです。これを実現するには、SFINAE (例: std::enable_if) といくつかのテンプレート メタ プログラミングを使用できます。

アイデアを与えるには:

#include <type_traits>

template <class T, class... Candidates>
struct is_one_of;

/* alternative 1 - too complicated
template <class T, class Head, class... Tail>
struct is_one_of<T, Head, Tail...> 
  : std::integral_constant<bool, std::is_same<T, Head>::value || is_one_of<T, Tail...>::value>
{}; */

/* better alternative - thanks, Dan */
template <class T, class Head, class... Tail>
struct is_one_of<T, Head, Tail...> : is_one_of<T, Tail...> {}

template <class T, class... Tail>
struct is_one_of<T, T, Tail...> : std::true_type {}

/* needed for both alternatives */
template <class T>
struct is_one_of<T> : std::false_type {};

enable_if、あなたはに応じて専門分野をis_one_of<T, ?your-list-of-General-types-here?>

于 2012-12-05T14:32:36.603 に答える