gpt4 book ai didi

c++ - 如何通过编译时 "if"返回 T 值?

转载 作者:太空狗 更新时间:2023-10-29 20:39:15 26 4
gpt4 key购买 nike

我想做这样的事情:

template<typename T>
T func()
{
if(T is int)
return 1;
if(T is std::string)
return std::string("hello");//this line will not be able to compile if T is int
}

谁能告诉我如何解决这个问题?非常感谢。

最佳答案

例如使用模板特化...

template<typename T>
T func();

template<>
int func() { return 1; }

template<>
std::string func() { return "hello"; }

或使用enable_if

template<typename T>
typename std::enable_if<std::is_same<T, int>::value, int>::type func()
{
return 1;
}

template<typename T>
typename std::enable_if<std::is_same<T, std::string>::value, std::string>::type
func()
{
return "hello";
}

如果您不仅需要 int/string,还需要可以构造 int/string 的类型,您可以使用 decltype

template<typename T>
auto func() -> decltype(int{std::declval<T>()})
{
return 1;
}

template<typename T>
auto func() -> decltype(std::string{std::declval<T>()})
{
return "hello";
}

clang 可以很好地编译,但是 gcc 4.8 不能并且会因内部编译器错误而中断。

关于c++ - 如何通过编译时 "if"返回 T 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28426531/

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