有没有办法可以根据模板参数之一是size_t
还是数据指针成员来专门化模板类?
例如:
template<typename container_t, size_t offset>
struct SomeClass
{
// Some implementation
static void foo() {}
};
template<typename container_t, int container_t::*member>
struct SomeClass
{
// Another implementation
static void foo() {}
};
SomeClass<MyClass, 123>::foo();
SomeClass<MyClass, &MyClass::someMember>::foo();
答案 0 :(得分:4)
在C ++ 17中,是auto
,
template<typename C, auto>
struct SomeClass;
template<typename C, size_t N>
struct SomeClass<C, N>
{
// Some implementation
static void foo() {}
};
template<typename C, int C::*member>
struct SomeClass<C, member>
{
// Another implementation
static void foo() {}
};
之前,你必须添加额外的参数。
template<typename C, typename T, T value>
struct SomeClass;
答案 1 :(得分:1)
如果你不介意将类型作为附加参数传递,你可以在任何C ++版本中使用它。
template <typename container_t, typename T, T offset>
struct SomeClass;
template <typename container_t, size_t offset>
struct SomeClass<container_t, size_t, offset> {
};
template <typename container_t, typename T, T container_t::*member>
struct SomeClass<container_t, T container_t::*, member> {
};