这是一段简单的代码:
#include <iostream>
#include <fstream>
template<typename T>
class A {
public:
T _v;
template<unsigned short V> void init() { _v *= V; }
void print(double txt) { std::cout << "Initialized with ?? : " << txt << std::endl; }
};
int main() {
A<double> foo;
foo._v = 3.5;
foo.init<2>();
foo.print(foo._v);
A<int> bar;
bar._v = 2;
bar.init<5>();
foo.print(bar._v);
}
我希望函数A::print(double)
的实现依赖于unsigned short V
,例如,??
替换unsigned short
init()
class A<T>
已经实现了。我的问题是:(a)可行吗? (b)如果(a),如何?
在搜索(a)时,我认为我可以向V
添加一个仿函数,在init()
中初始化其状态(值为print(double)
),在{ {1}},但我从未使用过这样的物体,所以我不知道这是否可行。我基本上对任何建议持开放态度,我唯一需要的是对print
的调用保持不变(因为我会从其他不知道unsigned short V
值的类中调用它
谢谢!
答案 0 :(得分:0)
一种方式:
template<typename T>
class A {
public:
T _v;
unsigned short _v2;
template<unsigned short V> void init() { _v2 = V; _v *= V; }
void print(double txt) { std::cout << "Initialized with "
<< _v2 << " : " << txt << std::endl; }
};
或者为什么不呢:
template<typename T, unsigned short V>
struct A {
T _v = V;
void print(double txt) { std::cout << "Initialized with "
<< V << " : " << txt << std::endl; }
};