gpt4 book ai didi

c++ - 双模板函数重载失败

转载 作者:行者123 更新时间:2023-11-30 03:52:19 25 4
gpt4 key购买 nike

我有一个模板类,有各种模板函数。其中一个需要重载(几次)。

基本上 - 如果我的类不是模板,这些将是我的函数:

class OtherClass
{
public:
template<class T> T foo(T &t, const std::string &trash);
};

template<class T>
T OtherClass::foo(T &t, const std::string &trash)
{
return t; //...
}

template<>
std::wstring OtherClass::foo<std::wstring>(std::wstring &w, const std::string &trash)
{
return w; //...
}

这个:

int main(...)
{
int i = 0;
std::wstring w;

OtherClass o;
i = o.foo(i, std::string(""));
w = o.foo(w, std::string(""));
}

我的模板类看起来像:

template<class MStr>
class OtherClass
{
public:
template<class TVal> TVal foo(TVal &t, const MStr &trash);
};

//Which leads to the function definition

template<class MStr>
template<class TVal>
TVal OtherClass<MStr>::foo(TVal &t, const MStr &trash)
{
return t; //...
}

我想要的...(以 int 为例)

template<class MStr>
template<>
int OtherClass<MStr>::foo<int>(int &t, const MStr &trash)
{
return t; //...
}

欢迎来到
C2768:非法使用显式模板参数

C2244:无法匹配函数定义

1>...\test\main.cpp(74): error C2768: 'OtherClass<MStr>::foo' : illegal use of explicit template arguments
1>...\test\main.cpp(74): error C2768: 'OtherClass<MStr>::foo' : illegal use of explicit template arguments
1>...\test\main.cpp(74): error C2244: 'OtherClass<MStr>::foo' : unable to match function definition to an existing declaration
1> definition
1> 'int OtherClass<MStr>::foo<int>(int &,const MStr &)'
1> existing declarations
1> 'TVal OtherClass<MStr>::foo(TVal &,const MStr &)'
1>
1>Build FAILED.

我一直在测试,并在 Google 和 Stackoverflow 中寻找了几个小时...到目前为止,似乎不适用于我的最佳答案/问题是 this.

问:是否有人可以为我指出正确的方向,或者有解决办法来解决这个问题?

最佳答案

回避这个问题的一种方法是将 int 版本声明为重载而不是模板特化:

template<class MStr>
class OtherClass
{
public:
template<class TVal> TVal foo(TVal &t, const MStr &trash);
int foo(int &t, const MStr &trash);
};

然后定义为:

template<class MStr>
int OtherClass<MStr>::foo(int &t, const MStr &trash)
{
return t; //...
}

如果你有很多过载情况,它就不是特别漂亮,但它可能胜过任何其他解决方案。

关于c++ - 双模板函数重载失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755662/

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