繁体   English   中英

C ++,模板化模板规范

[英]C++, templated template specification

我有一个没有实现两种方法的模板。

我只想使用作为模板规范的类,因为我提供了规范。

例:

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

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

现在,我想提供规范的模板类型,例如

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

我将指定哪些类型是General

我该如何使用C ++语法?

似乎您想为一系列已知类型提供一些专业化知识。 为此,您可以使用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?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM