gpt4 book ai didi

c++ - 执行特定功能取决于类型

转载 作者:IT老高 更新时间:2023-10-28 21:37:02 26 4
gpt4 key购买 nike

我想制作一个可以根据类型处理不同类型事物的函数。

我知道重载是一个很好的解决方案。就像,

class C1 {...};
class C2 {...};
void handle(C1& c1){...}
void handle(C2& c2){...}

但是由于这两个初始化是相同的,因此重载方式中有很多重复的代码。这就是为什么我想把它们包装在一起。

我有一些想法。例如,

class C1 {...};
class C2 {...};

void handle_C1(C1 &c1);
void handle_C2(C2 &c2);

template<typename T>
void handle(T &content){
// Initialization was done here
if (std::is_same(C1, T))
handle_C1(content);
if (std::is_same(C2, T))
handle_C2(content);
}

Acompile error was found error that handle_C2 mismatch parameters 因为handle_C2参数类型在我调用时是C2

C1 c1;
handle_C1<C1>(c1);

根据 C++ 中的 SFINAE,我希望编译会忽略此替换失败,但事实并非如此。

有人可以给我建议吗?

最好的解决方案是重载吗?如果是真的,我怎样才能减少我的重复代码。

最佳答案

在我看来,你想多了这个问题。只需在没有初始化代码的情况下定义重载,并定义一个利用重载解析的 handle 函数。

class C1 {...};
class C2 {...};
void handle_impl(C1& c1){...} // Remove initialization from your overloads
void handle_impl(C2& c2){...}

template<typename T>
void handle(T &content)
{
// Initialization is done here

// Let the compiler resolve overloads for you
handle_impl(content);
}

关于c++ - 执行特定功能取决于类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509545/

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