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
在代码中使用上面提到的模板化结构,但我正在寻找基于标准库的解决方案(如果存在),而不是重新发明轮子。
从 C++20 开始,您可以使用std::type_identity这正是您想要的类型。
f(std::type_identity<int>());
g(std::type_identity<int>());
Run Code Online (Sandbox Code Playgroud)