'尝试解析可变参数模板时无法推断出'T的模板参数
'Could not deduce template argument for 'T'' when trying to parse variadic template
我正试图将一个结构类型列表传递到另一个类中,该类将接受每个自定义类并添加某种类型。将结构类型放入包装器并将其插入元组中。一般来说,我是模板的新手,不知道为什么代码不能编译。
模板解析器包装器的东西
namespace engine
{
template<class T>
struct component_manager
{
int component_id;
std::vector<T> components;
component_manager() : component_id(id_counter) { id_counter++; }
};
template<class... Ts>
class ecs_manager
{
public:
std::tuple<> components;
template<class... Ts>
ecs_manager()
{
constructor_helper<Ts...>();
}
template<class T, class... Ts>
void constructor_helper()
{
components = std::tuple_cat(components, component_manager<T>());
constructor_helper<Ts...>();
}
template<class T>
void constructor_helper() {}
};
}
结构
struct transform
{
engine::vector3 position;
engine::vector3 rotation;
engine::vector3 scale;
};
struct motion
{
engine::vector3 velocity;
};
struct mesh
{
int id;
};
创建模板解析器包装器engine::ecs_manager<transform, motion, mesh> ecs;
编译时,我会得到以下信息:无法推导"T
"的模板参数未找到匹配的重载函数
不确定。。。但我想你在找
template <typename ... Ts>
class ecs_manager
{
public:
std::tuple<component_manager<Ts>...> components;
ecs_manager ()
: components{ component_manager<Ts>{} ... }
{ }
};
不管怎样。。。C++是一种强类型语言。
所以你不能定义一个空元组
std::tuple<> components;
并递归递增
components = std::tuple_cat(components, component_manager<T>());
您必须根据需要定义components
,并且不能更改其类型运行时
相关文章:
- 如何通过参数抛出错误消息
- '尝试解析可变参数模板时无法推断出'T的模板参数
- 如何从第一个参数推断第二个参数类型?
- "auto"推断出 hashtable_policy.h 中的错误类型
- 为什么编译器不能从返回类型中推断出模板参数?
- 无法从'int'中推断出'Node<T> *'的模板参数
- 从第一类型的第二个非类型参数中推断出第一类
- 是否可以推断出模板功能中的参数类型
- 无法从'std::string'中推断出'const std::reverse_iterator<_RanIt> &'的模板参数
- 有没有办法从基类函数参数中推断出模板参数
- 无法推断出'const'的模板参数...从 int
- 是否可以在可变参数模板中推断出容器类型
- 错误:调用"反向"没有匹配函数:候选模板被忽略:推断出参数的冲突类型
- 是否可以推断出左值引用非类型模板参数
- "template argument deduction for class templates"是否应该推断出可变参数类模板的空参数包?
- 是否可以从大括号类型初始化中推断出元组的模板参数
- 动态创建数组 - 无法推断出"T"的模板参数 - C++
- 为什么我不能推断出这个函数的模板参数?
- 为什么编译器不能从函数参数中推断出我的模板值?
- C++错误:推断出参数'T'字符串与常量字符的冲突类型 *