如何访问模板参数?

问题描述 投票:0回答:1

如果我需要知道使用它的其他模板中的模板参数,我如何访问它们?

下面的方法是推荐的方法,还是有一些语法可以允许在没有这样的

constexpr static size_t data_size
的情况下从
data_user_typed
_data_size
中的
 ExtendableIndex
进行访问?
我知道就生成的代码而言这是免费的,但是无论如何,这是推荐的方法还是可以用语言以更直接的方式完成?

这是

演示

constexpr static


c++ std
1个回答
0
投票

#include <array> using data_type = int; template<std::size_t _data_size> struct ExtendableIndex { constexpr static std::size_t data_size = _data_size; std::size_t index; std::array<data_type, _data_size> data; }; template<> struct ExtendableIndex<0> { constexpr static std::size_t data_size = 0; std::size_t index; }; constexpr std::size_t cache_length = 0; // Can be set to any cache size including 0 using DefaultIndex = ExtendableIndex<cache_length>; template<std::size_t _data_size> ExtendableIndex<_data_size> data_user() { ExtendableIndex<_data_size> index{}; if constexpr (_data_size > 0) { auto value = index.data[0]; } return index; } template<typename T> T data_user_typed() { T index{}; if constexpr (T::data_size > 0) { auto value = index.data[0]; } return index; } int main() { auto index_one = data_user<cache_length>(); // Works, but requires passing length, not a type auto index_two = data_user<DefaultIndex::data_size>(); // Seems to be better auto index_three = data_user_typed<DefaultIndex>(); // Good, but still requires constexpr static data_size }

template <typename T> struct GetSize {};
template <std::size_t N> struct GetSize<ExtendableIndex<N>> : std::integral_constant<std::size_t, N> {};

==

GetSize<ExtendableIndex<42>>::value
由于这比较冗长,通常会使用您的方法。

© www.soinside.com 2019 - 2024. All rights reserved.