0
其模板;-)考慮下面的模板成員函數和類CRTP:匹配固定大小的數組再次
template<typename T>
struct base
{
...
};
struct derived : public base<derived>
{
...
};
struct some_class
{
template<typename T>
void match(base<T>* array, size_t count)
{
...
};
template<typename T, size_t count>
void match(base<T> (&array)[count])
{
...
};
};
爲什麼不編譯器找到一個匹配第二個功能:
derived array[10];
some_class foo;
foo.match(array, 10); // works fine
foo.match(array); // Error: no matching function for call to some_class::match(derived array[10])
我期望第二個模板函數可以扣除編譯時fixde數組的大小,但顯然這個函數沒有考慮到。爲什麼?
感謝
編輯:奇怪的是以下版本編譯罰款:
template<typename T, size_t count>
void match(T (&array)[count])
{
...
};
所以我懷疑,在一些點上的原始版本被排除由於某種原因,我只是不明白。