gpt4 book ai didi

c++ - 什么是无约束转换运算符模板,它有什么用?

转载 作者:行者123 更新时间:2023-11-30 04:14:43 25 4
gpt4 key购买 nike

考虑这个类片段:

class A
{
public:
template <class T>
operator const T &() const;
};

这种模板化转换运算符适用于哪些情况?

最佳答案

我还没有看到它转换为引用(因为你会通常想返回一个临时的),但它通常是重载返回类型的技巧。你是主要类(class)会有许多不同的 setter/getter (或其他功能返回不同的类型),通用的 getter 将返回具有此类转换运算符的代理:

class MyClass
{
public:
template <typename T>
T typedGet() const { /*...*/ }

class Proxy
{
Main const* myOwner;
public:
Proxy( Main const& owner ) : myOwner( owner ) {}
template <typename T>
operator T()() const { return myOwner->typedGet<T>(); }
};
Proxy get() const { return Proxy( *this ); }
};

有了这个,还有一个 MyClass 的实例,你可以写:

int x = myObj.get();
std::string y = myObj.get();

这通常用于配置文件条目之类的东西,其中 typedGet 将使用 std::istringstream 来转换配置文件中的字符串为所需的任何类型(当然,会有专门的std::string,因为你不想或不需要std::istringstream.)

对于 C++11,另一种可能的解决方案是:

auto x = myObj.get<int>();
auto y = myObj.get<std::string>();

我不完全相信——这看起来有点像虐待auto,但我可以看到它的参数。它肯定简化了 MyClass 的实现,因为你可以放弃代理。

关于c++ - 什么是无约束转换运算符模板,它有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18724150/

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