【发布时间】:2017-06-15 15:46:41
【问题描述】:
对于以下 MWE,是否有一种简单的方法可以将两个模板特化合并为一个,可能使用 std::enable_if?
#include <string>
#include <list>
#include <memory>
class A {
// ...
};
class B {
// ...
};
template<typename T> class C {};
template<typename T>
class C<std::list<T> &> : public A, public B
{
std::list<T> &l_ref;
public:
C(std::list<T> &lr) : l_ref{lr} { }
// ...
};
template<typename T>
class C<const std::list<T> &> : public A, public B
{
const std::list<T> &l_ref;
public:
C(const std::list<T> &lr) : l_ref{lr} { }
// ...
};
为惯用语
template<typename T>
struct C<T, typename std::enable_if<
std::is_same<T, std::list<E> &>::value ||
std::is_same<T, const std::list<E> &>::value>::type>
: public A, public B
{
// ...
方式,我看不出有任何方法可以使E 可推导或指定“任何std::list”的类型。
【问题讨论】:
-
您的意思是您要编写一个模板,但同时适用于
const和非const版本?它们的行为是否相同?
标签: c++ templates c++14 template-specialization