std C++ 中的类型持有者

Art*_*oul 2 c++ types

std C++ 库中有这样的东西吗?:

template <typename T>
struct TypeHolder { using type = T; };
Run Code Online (Sandbox Code Playgroud)

即仅用于传递类型并存储它的特殊结构。这个想法是我想通过值在函数内部传递它,例如:

在线试试吧!

void f(auto th) { typename decltype(th)::type val{}; }
void h() {
    auto g = [](auto th){ typename decltype(th)::type val{}; };
    f(TypeHolder<int>());
    g(TypeHolder<int>());
}
Run Code Online (Sandbox Code Playgroud)

因为我可以传递一个类型,template <typename T>但现在我想通过值作为自动函数和/或非模板化 lambda 的参数之一传递它。

存在std::integral_constant可以有点用于类型保持,但它不适合我,因为我不想提供我的类型的值和/或实例化值。不仅如此,我还有非结构类型,因此我无法在 std::integral_constant 中提供它的值。

当然我可以TypeHolder在代码中使用上面提到的模板化结构,但我正在寻找基于标准库的解决方案(如果存在),而不是重新发明轮子。

cig*_*ien 7

从 C++20 开始,您可以使用std::type_identity这正是您想要的类型。

f(std::type_identity<int>());
g(std::type_identity<int>());
Run Code Online (Sandbox Code Playgroud)

演示