如何使用三元运算符制作指向多态 类 的唯一指针?
How to make unique pointers to polymorphic classes using the ternary operator?
我正在尝试使用三元运算符设置变量。但是,编译器抱怨类型不兼容。我确定有办法做到这一点。我已经尝试静态转换为基础 class,但我无法获得正确的语法。
#include <iostream>
#include <memory>
struct A
{
virtual ~A() = default;
virtual void test() {std::cout << "A" << std::endl;}
};
struct B: public A
{
void test() final {std::cout << "B" << std::endl;}
};
struct C: public A
{
void test() final {std::cout << "C" << std::endl;}
};
int main()
{
bool t = true;
// Try to cast try a base unique class ptr. Maybe use static_cast??
std::unique_ptr<A> aptr = t ? std::make_unique<B>(): std::make_unique<C>();
aptr->test();
}
试试这个:
std::unique_ptr<A> aptr = t ? std::unique_ptr<A>(new B()): std::unique_ptr<A>(new C());
Return 三元表达式的值是两个表达式的公共类型(事实上 std::common_type
可能使用三元运算符作为其实现的一部分:-))。
而 std::unique_ptr<B>
和 std::unique_ptr<C>
是不相关的类型,
std::unique_ptr<B>
和 std::unique_ptr<C>
都可以转换为 std::unique_ptr<A>
,因此显式转换一个就足够了:
auto aptr = t ? std::unique_ptr<A>{std::make_unique<B>()}
: std::make_unique<C>();
我正在尝试使用三元运算符设置变量。但是,编译器抱怨类型不兼容。我确定有办法做到这一点。我已经尝试静态转换为基础 class,但我无法获得正确的语法。
#include <iostream>
#include <memory>
struct A
{
virtual ~A() = default;
virtual void test() {std::cout << "A" << std::endl;}
};
struct B: public A
{
void test() final {std::cout << "B" << std::endl;}
};
struct C: public A
{
void test() final {std::cout << "C" << std::endl;}
};
int main()
{
bool t = true;
// Try to cast try a base unique class ptr. Maybe use static_cast??
std::unique_ptr<A> aptr = t ? std::make_unique<B>(): std::make_unique<C>();
aptr->test();
}
试试这个:
std::unique_ptr<A> aptr = t ? std::unique_ptr<A>(new B()): std::unique_ptr<A>(new C());
Return 三元表达式的值是两个表达式的公共类型(事实上 std::common_type
可能使用三元运算符作为其实现的一部分:-))。
而 std::unique_ptr<B>
和 std::unique_ptr<C>
是不相关的类型,
std::unique_ptr<B>
和 std::unique_ptr<C>
都可以转换为 std::unique_ptr<A>
,因此显式转换一个就足够了:
auto aptr = t ? std::unique_ptr<A>{std::make_unique<B>()}
: std::make_unique<C>();