如何在不进行虚拟调用的情况下实例化模板类的模板成员函数?
所以想象一个标题:class.h
#pragma once
template<class T>
class A {
public:
template<class R>
T b(R r);
};
class.cc
#include <limits>
#include "class.h"
template<class T> template<class R> T A<T>::b(R r)
{
/* Some code */
return std::numeric_limits<R>::max() - r;
}
void dummy()
{
A<int> a;
a.b<short>(2);
}
和一些测试文件:
#include <iostream>
#include "class.h"
using namespace std;
int main(){
A<int> a{};
auto ans = a.b<short>(2);
cout << ans << " " << sizeof(ans) << endl;
}
如何强制编译器编译A<int>::b<short>(short)
而不在class.cc中调用它(并因此放置一个伪函数)或将所有内容放入标头中(并且必须始终重新编译大量代码) )。
我在抄送文件中尝试了template A<int>;
和template <> template <> int A<int>::b(short)
的不同形式,但语法不正确。
答案 0 :(得分:1)
您可以这样做:
*