可以采用size_t参数或指向成员的指针的模板类

时间:2018-01-22 21:01:28

标签: c++ templates template-meta-programming

有没有办法可以根据模板参数之一是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();

2 个答案:

答案 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> {

};