C++中的类型级函数

bf1o4zei  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(89)

我现在有一个班

template <typename T, typename Context>
class Foo {
    T value;
    Context context;
}

字符串
令人沮丧的是,T的值完全决定了Context的值,因此第二项相当多余。在类似的情况下,我向类中添加了一个Context类型,然后将函数编写为

template <typename T>
class Foo {
    T value; 
    T::Context context;
}


不幸的是,我不能在这里做同样的事情,因为90%的foo调用都是在intdouble上,我不能修改类型。
有没有可能写一个类型级别的函数,它接受我的初始类型并返回相关类型。我在想象一些东西。

template <typename T> typename FooContext;
using FooContext<int> = std::string;
using FooContext<NodeValue> = NodeValue::Context;

template <typename T>
class Foo {
    T value; 
    FooContext<T> context;
}


作为一个额外的挑战,我们的项目是在C17上,所以不需要C20概念的答案将被优先考虑。

zbq4xfa0

zbq4xfa01#

不直接使用alias,而是使用常规类,这是可能的:

template <typename T> struct FooContext
{
    using type = typename T::Context;
};
template <> struct FooContext<int>
{
    using type = std::string;
};

// Other specialization as `double`.

template <typename T>
using FooContext_t = typename FooContext<T>::type;

template <typename T>
class Foo {
    T value; 
    FooContext_t<T> context;
};

字符串

相关问题