5
考慮下面的程序:模板常量類型轉換操作符
#include <iostream>
template<int s>
class Pack
{
public:
Pack(){}
char data[s];
template<typename X> operator X&(){ return *reinterpret_cast<X*>(data); }
template<typename X> operator X const&()const{ return *reinterpret_cast<const X*>(data); }
};
int main()
{
const Pack<8> p;
const double d(p);
std::cout<<d<<std::endl;
}
它在Windows下編譯罰款。 在linux下,我得到:
test.cc: In function ‘int main()’:
test.cc:17: error: passing ‘const Pack<8>’ as ‘this’ argument of ‘Pack<s>::operator X&() [with X = double, int s = 8]’ discards qualifiers
爲什麼?爲什麼不使用const類型轉換運算符?我怎樣才能解決這個問題,仍然有方便的模板類型轉換運算符(在const和非const版本中)。 謝謝!
我收到與GCC(和Comeau)不同的錯誤。它沒有找到任何轉換功能。可能是因爲它正在尋找一個轉換函數,例如`operator double()`並且找不到合適的轉換函數(因爲提供的函數也有引用)。 - 如果這首先是一個好主意,爲什麼不使用一個命名的成員函數呢? – UncleBens 2010-11-23 18:05:27
@UncleBens,你是正確的,見下文。 – 2010-11-23 20:25:12