小编Dan*_*lGr的帖子

to_string 与强制转换为字符串和运算符<<

我想知道为我自己的类实现字符串转换的最佳方法是什么。我进行了广泛的搜索(并查阅了一些书籍),但令人惊讶的是我没有在任何地方找到任何建议。在我看来,选项是:

转换为字符串的内部类定义: operator std::string() const

类外重载 std::string to_string(const Obj&)

与此相关:<<在类内部还是外部声明流操作符的重载更好?

string casting conventions c++11

5
推荐指数
1
解决办法
1014
查看次数

可以在模板化的typedef上使用模板特化吗?

我想做类似下面的事情(在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没有类包装器的语句,因为它更简单,更优雅.如果有另一个简单,优雅的解决方案,请分享!)

c++ using template-specialization c++11 c++14

4
推荐指数
1
解决办法
332
查看次数

如何使用模板化构造函数调用make_shared或make_unique

我如何调用make_sharedmake_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++ templates smart-pointers make-shared c++11

3
推荐指数
1
解决办法
1413
查看次数