我想從一個開源項目中編譯代碼,而且我遇到了gcc聲稱特定行代碼含糊不清的解釋的問題。該問題涉及模板類和這兩種方法:歧義運算符[]綁定
template <class X>
class A {
public:
X& operator[] (int i) { ... }
operator const X*() { ... }
};
當此沿該線中使用:
A<B*> a;
B* b = a[i];
GCC抱怨的[I]的曖昧分辨率。該問題通過與它的特定實例替換A的定義變得更加清楚:
class A_B {
public:
B*& operator[] (int i) { ... }
operator B* const *() { ... }
};
的問題是,有解釋B * B的兩種方式= A [1]:
// First interpretation (array-like behaviour first)
B*& b1 = a[i];
B* b2 = (B*) b1;
// Second interpretation (casting behaviour first)
B* const * b1 = (B* const *) a;
B* b2 = b1[a];
我的問題是這樣的:有沒有辦法提供一個首選的解釋,最好是通過不需要顯式強制轉換而不需要強制轉換,以便我不必修改試圖調用A []的每一行?我意識到解釋是合法的,但我知道代碼的意圖是什麼,我想通過最少的更改與編譯器進行交流。
編輯:看來我的例子不會導致問題,所以我沒有正確地總結原始代碼,也沒有正確地識別問題。我會試着首先得到一個能夠產生問題的例子,抱歉的人們。
你確定還有其他事情沒有進行嗎?我用gcc -Wall編譯了你的例子,它沒有給出太多的窺視。 – 2009-02-12 00:54:52