像这样:
typeArray type[2] = {uint8_t, uint16_t};
for (int i=0; i < 2; i++)
{
myFunction<type[i]>();
}
Run Code Online (Sandbox Code Playgroud)
我认为这是不可能实现的,因为它违反了 C++ 中的一些规则。但我不确定,我也不熟悉 C++ 的新特性(11 14 17 等)。所以有人可以告诉我答案吗?
更加具体。
\\ Such as I have a template functon "PrintSecondTypeLen"
template<typename Type>PrintSecondTypeLen(unsigned int *a)
{
Type *b;
b = (Type *) a;
std::cout << *(b+1) << std::endl;
}
\\ Then suppose that I have a typeArray.
typeArray type[2] = {uint8_t, uint16_t}; \\ It's wrong, just for example.
\\ Then I use it:
unsigned int a[2] = {0x56575859, 0x46474849};
for (int i=0; i < 2; i++)
{
PrintSecondTypeLen<type[i]>(a);
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,类型在运行时不是一流的值。您可以在编译时为模板元编程使用类型列表,但不能在运行时使用。
您的“循环”可以使用可变参数模板实现,但在编译时而不是在运行时扩展它。
可能是(可能是)类型作为一等值是将在 C++23 中通过反射引入的东西。以哪种形式以及你能用它做什么是另一个问题。
C++ 在这方面的主要问题是类型在编译程序中实际上并不存在。从某种意义上说,类型是代码的一部分,编译后的程序不处理代码,而是处理数据(在 C++ 中,数据不是代码,代码也不是数据;出于心理原因,这个“障碍”也不容易被打破) .
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |