是否可以调用显式指定模板参数的模板化强制转换运算符

Is it possible to call the templated cast operator explicitly specifying template parameters?

本文关键字:运算符 转换 参数 调用 是否      更新时间:2023-10-16

考虑代码:

#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> >();