我的问题:
如果我为基类中的const元素提议一个数组,并且在某些派生类中数组值应该不同,那么最好的方法是什么?
使用单个值很容易。 对于数组,我不知道有什么好的解决方案。
当然,此代码不起作用,它只能演示问题和所需的行为:
class Base1 {
public:
Base1( uint32_t const arr[] ) : m_arr( arr[] ) {}
// Base1( uint32_t const val ) : m_val( val ) {}
void f1() {
int const size = sizeof( m_arr ) / sizeof( uint32_t );
for( int idx = 0; idx < size; ++idx ) {
std::cout << "val: " << m_arr[idx] << std::endl;
}
}
private:
uint32_t const m_arr[];
// uint32_t const m_val;
};
uint32_t const c_arr_derived1[] = { 1, 2, 3 };
// uint32_t const c_val = 3;
class Derived1 : public Base1 {
public:
Derived1() : Base1 ( c_arr_derived1 ) {}
//Derived1() : Base1 ( c_val ) {}
};
有什么好的解决方法吗?
注意:派生类最终将具有具有不同实现的纯虚函数,因此我想要一个抽象基类
有关评论的更新
static uint32_t m_arr[]
并正确定义,则g ++会编译)。该示例将仅显示我要实现的目标const
并存储在ROM中,理想情况下不要在构造时进行复制。如果std::vector
可以做到,那么有人可以在不久之后详细说明一个例子吗?似乎是某事。我猜像here一样。对于具有const数据(结构)的大型数组,我更希望将值放在ctor之外的其他地方。答案 0 :(得分:0)
前一段时间,无论如何,以下是我最终使用的内容。
const
sizeof
的const值代码:
class Base {
public:
Base( uint32_t const * arr, uint32_t const sz ) :
m_arr( arr ),
m_sizeof_arr( sz ) {}
void work() {
for( int idx = 0; idx < m_sizeof_arr; ++idx ) {
std::cout << "val: " << m_arr[idx] << std::endl;
}
}
private:
uint32_t const * m_arr;
uint32_t const m_sizeof_arr;
};
uint32_t const c_arr_derived1[] = { 1, 2, 3 };
class Derived1 : public Base {
public:
Derived1() : Base (
c_arr_derived1,
sizeof( c_arr_derived1 ) / sizeof( uint32_t ) ) {}
};
uint32_t const c_arr_derived2[] = { 4, 5, 6, 7 };
class Derived2 : public Base {
public:
Derived2() : Base (
c_arr_derived2,
sizeof( c_arr_derived2 ) / sizeof( uint32_t ) ) {}
};
int main() {
Derived1 d1;
d1.work();
Derived2 d2;
d2.work();
return 0;
}