我在模板類中有一個模板方法。
我讀過一個方法不能專門化,沒有專門的類之前。
但我想分解一些這些方法,這可能嗎?C++因式分解模板類的tempate方法專業化,可能嗎?
例子:
class One {
public:
static const int number = 1;
};
class Two {
public:
static const int number = 2;
};
template<typename num> class A {
private:
num n;
public:
template<typename type>
void multiplyBy(); // by 1 if <int> or 1,5 if <float>
}; // A
template<> template<> void A<One>::multiplyBy<int>() {
std::cout << 1.0*n.number << std::endl;
}
template<> template<> void A<One>::multiplyBy<float>() {
std::cout << 1.5*n.number << std::endl;
}
template<> template<> void A<Two>::multiplyBy<int>() {
std::cout << 1.0*n.number << std::endl;
}
template<> template<> void A<Two>::multiplyBy<float>() {
std::cout << 1.5*n.number << std::endl;
}
int main() {
A<One> aOne;
A<Two> aTwo;
aOne.multiplyBy<int>(); // 1
aOne.multiplyBy<float>(); // 1.5
aTwo.multiplyBy<int>(); // 2
aTwo.multiplyBy<float>(); // 3
return 0;
}
一個計算器相關的問題:C++ specialization of template function inside template class
尤其是此評論:C++ specialization of template function inside template class
有我扣除比沒有辦法因式分解multiplyBy(),一個用於int和另一個用於float?
由於英語不是我的自然語言,我可能會錯過簡單的東西,也許是部分專業化的解決方法。
編輯:把A :: n私下放在一起以便更好地匹配我的問題。
這個答案並不在我格外的情況下工作。 MultiplyBy()必須訪問A類的私有成員。我的問題沒有足夠的準確性。 – Benjamin 2015-02-10 08:25:52
'MultiplyBy'不需要訪問'A'的私有成員。當'A :: multiplyBy()'調用'MultiplyBy :: doit()'時,它通過值傳遞它的私有成員數據。 – 2015-02-10 14:51:53