gpt4 book ai didi

c++ - 具有模板函数的转换运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:00 24 4
gpt4 key购买 nike

我有一个带有转换运算符的类 std::string .除了接收 std::basic_string<T> 的函数外,它适用于所有东西(以 T 为模板)。

#include <string>
struct A{
operator std::string(){return std::string();}
};

void F(const std::basic_string<char> &){}
template<typename T> void G(const std::basic_string<T> &) {}

int main(){
A a;
F(a); // Works!
G(a); // Error!
return 0; // because otherwise I'll get a lot of comments :)
}

我收到的错误是

error: no matching function for call to 'G(A&)'                                     
note: candidate is:
note: template<class T> void G(const std::basic_string<_CharT>&)

现在,我知道我可以定义 G作为结构中的 friend A它会起作用,但我的问题是许多已经存在并接收到 std::basic_string<T> 的 STL 函数(例如,operator<< 打印函数、比较运算符或许多其他函数。

我真的很想能够使用 A就好像它是一个 std::string .有什么办法吗?

最佳答案

I would really like to be able to use A as if it was an std::string. Is there any way to do this?

是的,但是你确定你真的想要这个吗?解决方案是:

struct A : public std::string {
};

但回想一下 std::string没有 virtual析构函数,因此不能以多态方式使用。 您已被警告!!!

A str()是一个更好的解决方案,并允许您在要传递 A 时明确表示到采用 std::basic_string<T> 的函数.

关于c++ - 具有模板函数的转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106520/

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