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
)生成单独的代码吗?是的,这两个类的类型不同。这是可取的吗?如果没有,您总是可以在其上创建一个包装器(使用继承和组合)。