是否有一種簡單的方法可以將兩個模板專門化合併爲一個簡單的方法,可能使用std::enable_if
,用於以下MWE?合併常量和非常量的模板專業化std :: list
#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'版本?他們的行爲是否一樣? –