gpt4 book ai didi

C++ 模板成员函数已定义为相同类型

转载 作者:行者123 更新时间:2023-12-01 22:33:33 25 4
gpt4 key购买 nike

我下面有这个简单的代码,一个带有 2 个类型参数的模板。如果我用相同的类型声明我的类(例如 BidirectionalMap<int,int> ),我会收到错误:

int BidirectionalMap<T,S>::operator [](T) const' : member function already defined or declared  

这是我的模板代码:

template <class T, class S>

class BidirectionalMap{
int count(T t){
return 1;
}
int count(S s){
return 1;
}
};

最佳答案

你得到的错误是正常的,因为替换后你有

template <>
class BidirectionalMap<int, int>
{
int count(int t){ return 1; }
int count(int s){ return 1; } // Duplicated method
};

为了解决这个问题,您可以提供部分特化:

template <class T>
class BidirectionalMap<T, T>
{
int count(T t) { return 1; }
};

在 C++20 中,您可以使用 requires 来“放弃”方法:

template <class T, class S>
class BidirectionalMap
{
int count(T t) requires(!std::is_same<T, S>::value) { /*..*/ }
int count(S s) requires(!std::is_same<T, S>::value) { /*..*/ }
int count(T t) requires( std::is_same<T, S>::value) { /*..*/ }
};

关于C++ 模板成员函数已定义为相同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32550300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com