gpt4 book ai didi

c++ - C++11 的 decltype 是否不需要克隆?

转载 作者:可可西里 更新时间:2023-11-01 14:54:17 24 4
gpt4 key购买 nike

clone paradigm 用于制作派生类的拷贝,而不向下转换为基类类型。不幸的是,clone 必须在每个子类中实现(或与 CRTP 混合)。

C++11 的 decltype 是否有可能使它变得不必要?

我不认为下面的代码实际上复制了原始,而只是指向它的引用。当我尝试使用 new decltype(*original) 时,出现错误:错误:new 不能应用于引用类型

在 C++11 中,clone 仍然是可行的方法吗?或者是否有一些新方法可以使用 RTTI 从基类指针复制派生类对象?

#include <iostream>

struct Base
{
virtual void print()
{
std::cout << "Base" << std::endl;
}
};

struct Derived : public Base
{
int val;
Derived() {val=0;}
Derived(int val_param): val(val_param) {}
virtual void print()
{
std::cout << "Derived " << val << std::endl;
}
};

int main() {
Base * original = new Derived(1);
original->print();

// copies by casting down to Base: you need to know the type of *original
Base * unworking_copy = new Base(*original);
unworking_copy->print();

decltype(*original) on_stack = *original;
on_stack.print();
return 0;
}

最佳答案

decltype 是一个静态结构。与所有 C++ 类型构造一样,它无法推断对象的运行时 类型。 decltype(*original) 就是 Base&

关于c++ - C++11 的 decltype 是否不需要克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com