如果我需要知道使用它的其他模板中的模板参数,我如何访问它们?
下面的方法是推荐的方法,还是有一些语法可以允许在没有这样的
constexpr static size_t data_size
的情况下从data_user_typed
到_data_size
中的 ExtendableIndex
进行访问?我知道就生成的代码而言这是免费的,但是无论如何,这是推荐的方法还是可以用语言以更直接的方式完成?
这是
演示#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
由于这比较冗长,通常会使用您的方法。