变量中的模板类型
Template type from a variable
对于 Unity (C#( 和C++插件之间的接口,我需要能够使用在 Unity 中定义的两个模板参数实例化一个类。 我不能直接传递C++类型,所以我改用char
和switch
语句。
对于单个参数,它如下所示:
char type = 'I'; // For example; in practice, it is set from a Unity plugin call)
switch (type)
{
case 'I':
{
ExtArrayExporter<int> * data_link = new ExtArrayExporter<int>(static_cast<int*>(external_array), ext_array_length);
return(EXT_TYPES::RegisterNew(data_link));
}
case 'F':
{
ExtArrayExporter<float> * data_link = new ExtArrayExporter<float>(static_cast<float*>(external_array), ext_array_length);
return(EXT_TYPES::RegisterNew(data_link));
}
case 'B':
{
ExtArrayExporter<bool> * data_link = new ExtArrayExporter<bool>(static_cast<bool*>(external_array), ext_array_length);
return(EXT_TYPES::RegisterNew(data_link));
}
}
问题:
当ExtArrayExporter
需要两种类型并且我有两个来自 Unity 的字符时,如何实现此目的?
微不足道的是堆叠switch
语句,但随着要考虑的类型越来越多,这种情况会迅速增长,并且是重复的。
我希望我可以为变量分配一个类型,例如保留上面的方法,但显然这不会编译:
auto type_a = int;
C++是否为这种情况提供了任何顺利的解决方案?
我不知道ExtArrayExporter
、EXT_TYPES
等,所以我提出了一个通用代码,你可以根据自己的需要进行调整。
它基于递归可变参数模板foo()
函数如下
// ground case
template <typename ... Ts>
void foo ()
{ /* do something with Ts... */ }
// recursive case
template <typename ... Ts, typename ... Cs>
auto foo (char c0, Cs ... cs)
{
switch ( c0 )
{
case 'I':
return foo<Ts..., int>(cs...);
break;
case 'F':
return foo<Ts..., float>(cs...);
break;
case 'B':
return foo<Ts..., bool>(cs...);
break;
// ...
}
}
您可以按如下方式使用它
foo<>('I', 'B', 'F', 'B', 'B', 'I');
或者只是
foo('I', 'B', 'F', 'B', 'B', 'I');
这个想法是,每次调用foo()
都会使用一个char
参数,将其转换为模板参数并将其添加到Ts...
可变参数列表中;当 char 参数结束时(基本情况(,您可以使用解析的Ts...
模板参数。
请注意,此解决方案是通用的,不仅适用于 2,而且适用于未定义数量的参数。
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?