C++11/14/17 : template class pointer as template parameter

标签 c++ c++11 templates

<分区>

是否可以使用模板类指针来声明模板函数?像这样的东西:

template <typename FirstType, typename ... TypesRemaining>
class MyClass
{
  // ...
};

template <int n, template <typename FirstType, typename ... TypesRemaining> typename MyClass<FirstType, TypesRemaining...>::*ptr> myFunction() { 
  // ...
}

是否可以使用'using'来声明指针类型?像这样:

template <typename FirstType, typename ... TypesRemaining>
class MyClass
{
  // ...
};

template<typename FirstType, typename ... TypesRemaining>
using ptrMyClass = MyClass<FirstType, TypesRemaining...>*;

template <int n, template <typename FirstType, typename ... TypesRemaining> typename ptrMyClass<FirstType, TypesRemaining...> ptr> myFunction() { 
  // ...
}

最佳答案

你可以这样做(用 clang 编译很好,用 gcc 给 ICE):

template <typename FirstType, typename... TypesRemaining>
class MyClass
{
  // ...
};

template<int n, auto ptr> class
myFunction_impl;

template
<
    int n
,   typename FirstType
,   typename... TypesRemaining
,   MyClass<FirstType, TypesRemaining...> * ptr
> class
myFunction_impl<n, ptr>
{
    public: static void
    impl(void)
    {
        //  ...
    }
};

template<int n, auto ptr> auto
myFunction(void)
{
    return(myFunction_impl<n, ptr>::impl());
}

int main()
{
    myFunction<0, static_cast<MyClass<int, int, int> *>(nullptr)>();
    return 0;
}

Online compiler link

关于C++11/14/17 : template class pointer as template parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631278/

上一篇:c++ - QT并行编程

下一篇:c#串口奇数值?

相关文章:

c++ - UnspecifiedBoolType 的类型?关于typedef、成员函数指针和转换运算符

c++ - 模板实参作为模板参数传给另一个模板时,为什么推导不出来?

C++ 洗牌 vector

c++ - enable_if 检查迭代器的值类型是否是一对

c++ - 模板运算符 << 重载和 make_pair

c++ - cplexmiqp MATLAB 的 CPLEX 等效 C++

c++ - c/c++预处理器: how to ensure that correct file is included

c++ - 虚拟析构函数的默认覆盖

模板中的 C++ 数据类型

c++ - 仅 header C++ 库的类似 LGPL 的许可证