如何在 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
}
我想在 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
}