我使用鐺編譯使用C++ 14的方言我的代碼。看看下面的例子:構造與名稱衝突
class x
{
int _i;
public:
x(int i)
{
this->_i = i;
}
};
void x()
{
}
void f(class x my_x)
{
// Do something here
}
int main()
{
/*
f(x(33)); // Doesn't work
f(class x(33)); // Doesn't work
*/
// This works:
class x my_x(33);
f(my_x);
typedef class x __x;
f(__x(33));
}
在這裏,我有一個名爲x
他的名字的衝突與具有相同名稱的函數類。要區分x
類和x
函數,必須使用class
標識符。這適用於所有情況,但我永遠無法找到一種方法直接調用x
的構造函數。
在前面的例子,我想通過建立它在旅途中提供的功能f
與x
對象。但是,如果我用f(x(33))
它解釋爲一種病態的調用函數x
,如果我用f(class x(33))
它只是產生一個語法錯誤。
有很明顯的解決方法,但我想知道是否有什麼比使用臨時別名來定義類x或者顯式實例化一個會讓我煩惱的項目更優雅,因爲生活在調用函數的整個範圍內我只需要在函數調用中使用它。
也許有一個簡單的語法,我不知道呢?
沒有太大的意義,並加上一個很好的問題,而是'的typedef class x __x;'由於x之前的雙下劃線而未定義。 – Bathsheba
undefined是什麼意思?該代碼爲我編譯。我總是使用以雙下劃線開頭的類...我做錯了什麼? –
請參閱http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier。有一個愉快的下午重構。 – Bathsheba