由于继承,模板函数的多个函数定义
Multiple function definition for templated function due to inheritance
由于函数使用模板化参数和继承,我无法使用 VS2015 编译我的程序。
错误是this one。
我正在努力实现以下目标:
class A
{
//do something
};
class B : public A
{
//do something
};
template <typename T>
class Foo {
template <typename T>
friend void function(Foo<T> & sm) {
//do something
}
};
void main()
{
Foo<A> test;
Foo<B> test2;
};
我明白这个错误的意思,但我不明白为什么会这样。
我想 function
是用两个不同的签名创建的:
void function(Foo<A> & sm);
和
void function(Foo<B> & sm);
怎么是多定义?
编辑 - 完整的错误信息:
Error C2995 'void function(Foo<T> &)': function template has already been defined
EDIT² - 从零开始
Clang 和 MS 都有同样的抱怨。删除第二个模板说明符,它将编译。
class A{};
class B : public A{};
template <typename T>
class Foo {
// template <typename T>
friend void function(Foo<T> & sm) {
}
};
int main()
{
Foo<A> test;
Foo<B> test2;
};
T
已经为 class Foo
指定,所以它的友元函数被覆盖了。如果函数有差异,您会再给我们 template
,例如:
class A{};
class B : public A{};
template <typename T>
class Foo {
template <typename U>
friend void function(Foo<T> & sm, U another) {
}
};
int main()
{
Foo<A> test;
Foo<B> test2;
};
由于函数使用模板化参数和继承,我无法使用 VS2015 编译我的程序。
错误是this one。
我正在努力实现以下目标:
class A
{
//do something
};
class B : public A
{
//do something
};
template <typename T>
class Foo {
template <typename T>
friend void function(Foo<T> & sm) {
//do something
}
};
void main()
{
Foo<A> test;
Foo<B> test2;
};
我明白这个错误的意思,但我不明白为什么会这样。
我想 function
是用两个不同的签名创建的:
void function(Foo<A> & sm);
和
void function(Foo<B> & sm);
怎么是多定义?
编辑 - 完整的错误信息:
Error C2995 'void function(Foo<T> &)': function template has already been defined
EDIT² - 从零开始
Clang 和 MS 都有同样的抱怨。删除第二个模板说明符,它将编译。
class A{};
class B : public A{};
template <typename T>
class Foo {
// template <typename T>
friend void function(Foo<T> & sm) {
}
};
int main()
{
Foo<A> test;
Foo<B> test2;
};
T
已经为 class Foo
指定,所以它的友元函数被覆盖了。如果函数有差异,您会再给我们 template
,例如:
class A{};
class B : public A{};
template <typename T>
class Foo {
template <typename U>
friend void function(Foo<T> & sm, U another) {
}
};
int main()
{
Foo<A> test;
Foo<B> test2;
};