如何在 class body 之外定义 class 模板的模板化方法

How to define a templated method of a class template outside of class body

我想在 class 模板中使用模板化方法。我的意思是该方法的附加“模板化”。下面的代码片段应该解释我想要实现的目标:

#include <iostream>

using namespace std;

// a class with a template parameter
template <size_t SIZE>
class SomeClass {
    public:
        static const size_t size = SIZE; // do something with template parameter SIZE
        
        // declaration AND definition of some templated method within class body
        template <typename T> T someFunction(size_t position) {
            return static_cast<T>(position * size); // just do something with type T
        }
};


int main () {
    
    cout << "Access static information: SomeClass<15>::size = " << SomeClass<15>::size << endl;
    
    SomeClass<10> someclass; // instantiate with template parameter 10
    cout << "Access instance information: size = " << someclass.size << endl;
    cout << "Use someFunction with float return value: someclass.SomeFunction<float>(13) = " << someclass.someFunction<float>(13) << endl;
    return 0;
}

这行得通。但是,我想将 someFunction 的定义从 class 的 body 中移出(我有很多模板专业要写,我不想弄乱class 定义)。这个的语法是什么?

我知道如何为 class body 之外的模板化 class 定义方法,我知道如何定义 non-template [=27] 的模板化方法=]外classbody。现在我想同时进行。

您需要两个 模板:一个用于class,一个用于函数。

点赞:

template<size_t SIZE>
template <typename T>
T SomeClass<SIZE>::someFunction(size_t position) {
    return static_cast<T>(position * size); // just do something with type T
}