rpr*_*ero 1 c++ templates type-level-computation c++17
我目前正在上课
template <typename T, typename Context>
class Foo {
T value;
Context context;
}
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是 的值T完全决定了 的值Context,因此第二项相当多余。在类似的情况下,我向类添加了一个Context类型,然后将函数编写为
template <typename T>
class Foo {
T value;
T::Context context;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在这里不能做同样的事情,因为 90% 的 foo 调用都在进行int,double而且我无法修改类型。
是否可以编写一个类型级函数来获取我的初始类型并返回相关类型。我正在想象类似的事情。
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;
}
Run Code Online (Sandbox Code Playgroud)
作为一个额外的挑战,我们的项目是基于 C++17 的,因此不需要 C++20 概念的答案将被优先考虑。
不直接使用别名,而是使用常规类,可以:
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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |