次のことを考慮してください。
template <typename T>
class testString
{
public:
typedef T* iterator;
void insert(iterator aPos, size_t numChars, T aChar);
testString<T>& insert(size_t aIndex, size_t numChars, T aChar);
};
template <typename T>
void testString<T>::insert( iterator aPos, size_t numChars, T aChar )
{
}
template <typename T>
testString<T>& testString<T>::insert( size_t aIndex, size_t numChars, T aChar )
{
return *this;
}
int main()
{
testString<char> c;
c.insert(0, 10, 'a'); // ambiguous call
c.insert(1, 10, 'a'); // compiles fine
return 0;
}
あいまいな電話を受けるのはなぜですか?最初は推測していましたが(0なので、何でもかまいません)、次に。を調べましたstd::string
。ソースを調べたところ、次の2つの機能があります。
void insert ( iterator p, size_t n, char c );
string& insert ( size_t pos1, size_t n, char c );
そして、std :: stringで同じ呼び出しを試しましたが、正常に機能します。今、私はなぜ0
動作するのか分かりませんが、私の実装ではしばらくの間そうではないstd::string
とすぐに認識されますsize_t
(別の推測はタイプ特性でしたが、ソースにはそれの証拠はありません)?