作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以这样做:
template<class T, T type>
constexpr auto f(/* type used in some way... */) // -> decltype (etc. in case of C++11)
{
return std::integral_constant<T,t>{};
}
constexpr auto z = f(3); // z is deduced as an integral_constant<int,3>;
肯定不可能使用运行时值,但在这种情况下 3 是编译时值。也许有人知道一些我不知道的把戏......
[编辑] constexpr auto z2 = f<3>();//这样也行
我只是想避免重复类型..
最佳答案
您可以在 C++17 中使用 auto
模板参数:
template <auto T>
constexpr auto f()
{
return std::integral_constant<decltype(T), T>{};
}
用法:
f<3>(); // integral_constant<int, 3>
或者,您需要以编译时友好的方式包装您的值:
template <int X>
struct int_
{
using type = int;
static constexpr value = X;
};
template <typename T>
constexpr auto f(T)
{
return std::integral_constant<typename T::type, T::value>{};
}
用法:
f(int_<3>{});
关于c++ - 依赖型自动扣除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415152/
我是一名优秀的程序员,十分优秀!