【发布时间】:2017-07-31 00:21:25
【问题描述】:
我正在尝试构建编译时间表。我使用数组数组的数组......来做到这一点。不幸的是,编译器无法推断出结果类型的模板参数。有解决办法吗?
#include <array>
template <typename T, size_t... dims>
struct variadic_array;
template <typename T, size_t... dims>
using variadic_array_t = typename variadic_array<T, dims...>::type;
template <typename T, size_t dim>
struct variadic_array<T, dim> {
using type = std::array<T, dim>;
};
template <typename T, size_t dim, size_t ...dims>
struct variadic_array<T, dim, dims...> {
using type = std::array<variadic_array_t<T, dims...>, dim>;
};
template <typename T, size_t ...dims>
void foo(variadic_array_t<T, dims...>) {}
void call_foo() {
foo(variadic_array_t<int, 3, 4>{});
}
编译错误:
error: no matching function for call to 'foo'
foo(variadic_array_t<int, 3, 4>{});
^~~
note: candidate template ignored: couldn't infer template argument 'T'
void foo(variadic_array_t<T, dims...>) {}
^
【问题讨论】:
-
c++17推导指南能帮到这里吗?
-
只需将整个参数作为模板(
template<class A>void foo(A arr);。如果您需要元素类型,则将其存储为typename A::value_type -
我也是这样做的。它有一些缺点。
-
有什么缺点?
-
推导类型参数现在很痛苦。
标签: c++ template-meta-programming