gpt4 book ai didi

c++ - 是否可以调用显式指定模板参数的模板化转换运算符?

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

考虑代码:

#include <string>
#include <sstream>

template <class T>
struct converter_impl {
std::string to_convert;
operator T() {
T result;
std::stringstream ss(to_convert);
ss >> result;
return result;
}
};

struct converter {
std::string to_convert;
template <class T, class CI = converter_impl<T>>
operator T() {
CI ci = CI{std::move(to_convert)};
return ci;
}
};

converter from_string(std::string s) {
return converter{std::move(s)};
}

现在我可以使用 from_string 函数如下:

string s = "123";
int x = from_string(s);
cout << x << endl;

我只是好奇是否有一种方法可以显式指定模板参数来调用 converter 结构的转换运算符。语法:

from_string(s).operator int<int, converter_impl<int>>();

不工作...

最佳答案

您可以调用 cast 运算符,因为它不是模板化的:

int x = from_string(s).operator int();

或者像这样

int x = from_string(s).template operator int();

作为显式指定第二个模板参数的解决方法:

struct converter {
std::string to_convert;
template <class T, class CI >
operator T() {
CI ci = CI{std::move(to_convert)};
return ci;
}

template <class T, class CI>
T cast()
{
CI ci = CI{std::move(to_convert)};
return ci;
}
};

并像这样使用它:

auto y = from_string(s).cast<int, converter_impl<int> >();

关于c++ - 是否可以调用显式指定模板参数的模板化转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235751/

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