C++ 编译时不同的静态数组大小
假设我有一个类,其中有一个数组。在编译时,我知道数组将有多大。如何使用不同大小的数组创建此类的实例C++ 编译时不同的静态数组大小,c++,embedded,C++,Embedded,假设我有一个类,其中有一个数组。在编译时,我知道数组将有多大。如何使用不同大小的数组创建此类的实例 class MyClass { private: const unsigned size; int data[size]; /* More stuff here... */ } MyClass c1(4); /* Array size of 4 */ MyClass c2(16); /* Array size of 16 */ 我无法
class MyClass {
private:
const unsigned size;
int data[size];
/* More stuff here... */
}
MyClass c1(4); /* Array size of 4 */
MyClass c2(16); /* Array size of 16 */
我无法使用new/delete,因为动态内存不足。我也不能使用模板,因为我主要针对嵌入式系统。如果没有模板,这种事情可能发生吗?您可以尝试使用模板,如下例所示:
template <int size>
class MyClass {
private:
int data[size];
/* More stuff here... */
};
MyClass<4> c1 ; /* Array size of 4 */
MyClass<16> c2; /* Array size of 16 */
模板
类MyClass{
私人:
int数据[大小];
/*这里有更多的东西*/
};
MyClass c1;/*数组大小为4*/
MyClass c2;/*数组大小为16*/
请原谅我的无知,但是“瞄准嵌入式平台”与不能使用模板有什么关系?@Borgeader,几乎没有任何关系。@Borgeader:有一种叫做“嵌入式C++”的东西不包括模板(或名称空间,或C++的许多其他部分)。但是,它并没有获得多少人气,而且多年来它一直是一个死板的问题,甚至那些支持嵌入式C++的厂商也倾向于用模板支持来扩展它。(基本上,RTTI、异常和STL通常被忽略。)为什么静态定义的动态内存分配“被忽略”?从堆中更新某些内容(然后从不删除它)和在其他地方静态定义它之间没有实际区别。一般来说,只要你不在响应某个事件时“新建”或频繁地新建和删除某些内容,非静态分配内存就没有什么坏处。mSize
比无用更糟糕,因为模板参数总是可用的,我这样做是为了与原始代码保持一致,但是在这种情况下,它没有任何意义。如果创建不同类型的类,这会为类函数(如template
)生成单独的代码吗?是的,这两个类的类型不同。这是可取的吗?如果没有,您总是可以在其上创建一个包装器(使用继承和组合)。