gpt4 book ai didi

c++ - 如何在模板函数中转换为两种不同的类型?

转载 作者:行者123 更新时间:2023-11-27 23:37:33 27 4
gpt4 key购买 nike

我的小组维护着一些遗留的容器类,它们存储指针和 32 位整数。当它们被写入时,指针是 32 位的,但现在是 64 位的。每个函数都有两个版本,一个用于指针,一个用于整数,我正尝试使用模板将它们合并到一个函数中。我该怎么做才能让编译器开心?下面是该问题的玩具版本。

void* mPtr = nullptr;

template<class T>
void Func(T t) {
mPtr = reinterpret_cast<void*>(t);
}

template<class T>
T Func2() {
if (typeid(T) == typeid(int))
return static_cast<int>(reinterpret_cast<long long>(mPtr));
else
return static_cast<T>(mPtr);
}

class MyClass {};
int main() {
MyClass someClass;
Func(&someClass);
MyClass* myClass = Func2<MyClass*>();
int val = Func2<int>();
}

请记住,这只是一个玩具问题,我在这里只对有关是否可以重写 Func2() 的主体以使这段代码编译无误的答案感兴趣。例如,我意识到可以在这里使用模板特化,但这不符合问题的标准。谢谢!

最佳答案

使用 if constexpr(并修复代码中的所有拼写错误):

template<class T>
T Func2() {
if constexpr (std::is_same_v<T, int>)
return static_cast<int>(reinterpret_cast<long long>(mPtr));
else
return static_cast<T>(mPtr);
}

另见 Difference between "if constexpr()" Vs "if()" .

关于c++ - 如何在模板函数中转换为两种不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189371/

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