作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于 Unity (C#) 和 C++ 插件之间的接口(interface),我需要能够使用 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;
最佳答案
我不知道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...
模板参数。
关于c++ - 来自变量的模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60023170/
我有一个名为copyToClipboard()的函数。这需要一个名为 element 的参数。该函数通过定位元素的 id、选择并复制内容来复制元素的内容。 例如: JS /* * Copy to c
我正在研究 Java,想知道以下各项在性能方面有何不同。我知道过早优化是编程的困境,但我的好奇心仅供将来引用。 public class Type1{ int[] data = new da
我正在使用此代码从 csv 文件中获取数组: array_map('str_getcsv', 'file.csv') 但是在 array_map 函数中使用它时,如何为 str_getcsv() 设置
我是一名优秀的程序员,十分优秀!