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

标签 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();

最佳答案

在 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;

关于c++ - 可以采用 size_t 参数或指向成员的指针的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390206/

相关文章:

c++ - gdb 控件跳转到随机位置

c++ - gcc 如何决定隐式包含哪些库?

c++ - 具有模板功能的跨平台类

templates - 在Go模板中按名称访问结构成员

c++ - 从异构模板值的容器中返回模板类型

c++ - 被删除的构造函数 "accessible"吗?

c++ - 如何在 Rust 中为 ArmA 3 DLL 实现 RVExtension 函数?

c++ - 指向重载、模板化成员函数的 const 指针的静态数组

c++ - 用函数模板和SFINAE按参数区分

c++ - c++一致性是否使用decltype来帮助模板推导?