C++模板,静态函数专业化

Mon*_*dji 1 c++ static templates inline specialization

我的模板有语法错误

我想部分专门化我的模板类的静态函数

class.hpp

template <typename Foo, size_t bar = 26>
class MyClass
{
    MyClass();
    static void function();
};

#include "class.tpp"
Run Code Online (Sandbox Code Playgroud)

class.tpp

template <typename Foo, bar>
MyClass<Foo, bar>::MyClass()
{ }

template <typename Foo>
inline
void
MyClass<Foo, 6>::function()
{
    // ...
}

template <typename Foo>
inline
void
MyClass<Foo, 26>::function()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

error: template definition of non-template

我只想实现MyClass<Foo, bar>::functionbar == 26和bar == 6

怎么做得好?谢谢

Wea*_*ish 5

该函数本身不是模板,它只在一个类模板中.您可以为这些案例专门化类,但不能将函数本身专门化.

template <class Foo>
class MyClass<Foo, 26>
{
    static void function() { ... }
};
Run Code Online (Sandbox Code Playgroud)

如果你有这样的专门类,你只能在类中声明函数,并在外部定义它,如下所示:

template <class Foo>
void MyClass<Foo, 26>::function() { ... }
Run Code Online (Sandbox Code Playgroud)

如果您事先没有专门化它,那么使用不完整类型会出现编译错误.

您可能还会发现问题和答案,专门针对相关类模板中的单个函数.