目前,我有一个这样的函数模板,它将a转换vector为a string(只是一个自然的字符串,用逗号分隔元素):
//the type T must be passable into std::to_string
template<typename T>
std::string vec_to_str(const std::vector<T> &vec);
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这只是针对其元素可以传递到内置的载体std::to_string功能(如int,double等)
用允许的评论记录是否被认为是一种好的做法T?如果没有,我该怎么办?是否有可能以更好的方式执行此操作?
由于std::to_string是 C++11 功能,我猜您可能愿意接受 C++11 解决方案。在这种特殊情况下,您可以以 sfinae 方式使用尾随返回类型:
template <typename T>
auto vec_to_str(const std::vector<T>& vec) -> decltype(std::to_string(std::declval<T>()));
Run Code Online (Sandbox Code Playgroud)
如果值类型不适用于 ,则它将无法替代(并消除该过载)to_string。但这仍然不一定是记录和执行规则的最令人赏心悦目的方式。上述 Sfinae 技巧也可能有一个 C++11 之前的版本,但它不会更漂亮。
一般来说,我想说,只需在注释中记录它就可以了(可能使用 doxygen 标签,如\tparam)。如果需要,您可以使用 Boost.Concept-Check 风格的概念检查机制。
作为旁注,对于这种特定情况,我可能建议您依赖于而std::ostream operator <<不是函数to_string,因为自定义类型(例如,2D 向量或其他东西)更有可能配备重载以输出到溪流。