看來你想爲已知類型的列表提供一組專業化。要做到這一點,您可以使用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?>
從移動BTW發送...對不起,如果我有一些錯別字 – Taru