c++ - boost::lexical_cast 如何只采用一种模板类型?

标签 c++ templates generics boost template-specialization

我查看了 lexical_cast.hpp 的困惑情况,但它仍然让我无法理解。

lexical_cast 的“基本定义”采用模板源和目标,如何能够接受诸如 lexical_cast<int>("7") 之类的语法? ?我不明白它怎么只需要一个模板化的返回类型,而不需要你在不做一些非法的事情的情况下给出参数的类型,比如部分模板特化。

注意:我理解如何使用单一模板类型和不同参数的重载来做到这一点,但我不明白 lexical_cast 是如何基于同时需要源和目标模板类型的模板函数的。

最佳答案

模板参数可以从函数参数推导出来:

template <typename T>
void foo(const T& x)
{
    // T is the type of X
}

foo(5); // T is be int
foo("hello"); //T is const char[6]

关于c++ - boost::lexical_cast 如何只采用一种模板类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136400/

相关文章:

c++ - 小数背包中实现的贪心算法

c++ - 如何知道 OpenCV 3.0 算法是否在透明 API 中具有 OpenCL 实现

java - 如何测试泛型列表是否包含 Java 中子类型的确切子集合?

java - 如何避免使用通用返回值进行强制转换?

c++ - 构造函数内的错误 C2512 : no appropriate default constructor available: declaration of a object with arguments!

c++ - 这样的c++工具存在吗? [我不知道怎么调用它]

c++ - 仅为某些 std::vector<T2> 类型启用模板

templates - XSLT帮助-各种类似XML,模板用法的XSL

c++ - 使用 `void_t` 检查类是否具有具有特定签名的方法

java - Java 泛型的问题