gpt4 book ai didi

C++11 在 std::is_same 之后调用类型的构造函数以确认其类型

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:34 25 4
gpt4 key购买 nike

下面的代码无法编译,当我调用 Foo 类型的 func 时它会提示“无法将字符串转换为 int”,而当我调用 Bar 类型的 func 时它会提示“无法将 int 转换为字符串”。我以为我已经使用 std::is_same 来判断类型是 Foo 还是 Bar,为什么这似乎不起作用?执行此操作的更好方法是什么?

class Foo {
Foo(int foo){}
};

class Bar {
Bar(string foo){}
};

template<typename T>
void func(){
if(std::is_same<T, Foo>::value) {
T t(1);
} else {
T t("aaa");
}
}

func<Foo>();
func<Bar>();

最佳答案

C++ 中没有static if,所以即使不采用分支,代码也必须是可编译的。

你可以通过特化解决这个问题:

template<typename T>
void func(){
T t("aaa");
}

template<>
void func<Foo>(){
Foo t(1);
}

Demo

关于C++11 在 std::is_same 之后调用类型的构造函数以确认其类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444671/

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