我想知道为我自己的类实现字符串转换的最佳方法是什么。我进行了广泛的搜索(并查阅了一些书籍),但令人惊讶的是我没有在任何地方找到任何建议。在我看来,选项是:
转换为字符串的内部类定义:
operator std::string() const
类外重载
std::string to_string(const Obj&)
与此相关:<<在类内部还是外部声明流操作符的重载更好?
我想做类似下面的事情(在c ++ 11,c ++ 14;而不是c ++ 17):
template <class T>
using partner = void;
template<>
using partner<A> = X;
template<>
using partner<B> = Y;
template<>
using partner<C> = Z;
Run Code Online (Sandbox Code Playgroud)
但我收到编译错误---
错误:'使用'之前的预期unqualified-id
---关于第一个模板专业化.
这样的事情可能吗?(我已经知道我可以使用带有using语句的模板化类.我希望直接使用using没有类包装器的语句,因为它更简单,更优雅.如果有另一个简单,优雅的解决方案,请分享!)
我如何调用make_shared或make_unique具有模板化构造函数的类?这是一个例子:
class A
{
/// constructor shared ptr
A(shared_ptr<X> x) ...
/// constructor that creates new shared ptr
template <class T> A() : A(make_shared<T>(...)) {}
};
Run Code Online (Sandbox Code Playgroud)
make_shared<A<T>>() 没有意义(也没有编译),因为那宁可是模板化的类,而不是模板化的构造函数.
既没有make_shared<A><T>()也没有make_shared<A>(<T>())编译 - 也看起来不应该.同上make_shared<A, T>()
有没有办法在调用中为构造函数调用指定模板make_shared?我认为答案适用于make_unique; 如果没有,请说明.谢谢!
(为了澄清模板是如何工作的,我编辑了代码.)
c++11 ×3
c++ ×2
c++14 ×1
casting ×1
conventions ×1
make-shared ×1
string ×1
templates ×1
using ×1