0

在标题 view.h 中:

template<class S, template<typename> class V>
void Operate(S c, const V<S>& vx);

template<class T, template<typename> class U>
class ViewBase
{
    template<class S, template<typename> class V>
    friend void Operate(S c, const V<S>& vx);
};

template<class T>
class ViewTypeA : public ViewBase<T, ViewTypeA>
{

};

template<class T>
class ViewTypeB : public ViewBase<T, ViewTypeB>
{

};

template<class S, template<typename> class V>
void Operate(S c, const V<S>& vx)
{

}

在 cpp 中:

#include "view.h"

int main(int argc, char **argv)
{
    Operate(5, ViewTypeA<int>());
    Operate(5, ViewTypeB<int>());
}

gcc(使用 -std=gnu++11 编译)给出错误:

构建:在代码块中调试(编译器:GNU GCC 编译器)
main.cpp||在函数'int main(int, char**)'中:

main.cpp|7|error: 重载 'Operate(int, ViewTypeA&)' 的调用不明确

main.cpp|7|注意:候选人是:

view.h|25|note: void Operate(S, const V&) [with S = int; V = ViewTypeA]

view.h|9|note: void Operate(S, const V&) [with S = int; V = ViewTypeA;T = 整数;U = ViewTypeA]

main.cpp|8|error: 重载 'Operate(int, ViewTypeB)' 的调用不明确

main.cpp|8|注意:候选人是:

view.h|25|note: void Operate(S, const V&) [with S = int; V = ViewTypeB]

view.h|9|note: void Operate(S, const V&) [with S = int; V = ViewTypeB;T = 整数;U = ViewTypeA]

构建失败:2 个错误,0 个警告(0 分钟,0 秒)

问题:

类模板参数根本不应该出现在图片中 - 我是对的吗?歧义似乎是基于类的模板参数。

4

0 回答 0