gpt4 book ai didi

c++ - 基于模板类型的不同类型

转载 作者:行者123 更新时间:2023-11-30 01:45:20 25 4
gpt4 key购买 nike

我有 ::Class1::Class2,我想创建模板函数,获取第一个或第二个,然后根据所选类使用其他在不同命名空间中定义的类,即 NameSpace::Class1NameSpace::Class2。有没有办法用 C++ 实现?

例如:

namespace NameSpace 
{
class Class1 {}; class Class2 {};
}

template <class T> // example Class1 or Class2
void f(T object) {
NameSpace::T obj; // Something like this, but it doesn't work
}

最佳答案

NameSpace::T 不起作用,因为 T 不是 name Class1Class2,代表类型。模板不适用于这样的文本替换。

您可以提供一个特征来在全局命名空间中的类型和来自 NameSpace 的类型之间进行转换:

struct Class1{}; struct Class2 {};

namespace NameSpace
{
class Class1 {}; class Class2 {};

template <typename T> struct translate;
template<> struct translate<::Class1> {
using type = Class1;
};
template<> struct translate<::Class2> {
using type = Class2;
};

template <typename T>
using translate_t = typename translate<T>::type;
}

你可以这样使用它:

template <class T>
void f(T object) {
using Translated = NameSpace::translate_t<T>;
Translated obj;
}

关于c++ - 基于模板类型的不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784971/

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