在我的c ++程序中,我想将一个数组传递给一个函数,并将该数组的成员打印到控制台.
现在我遇到了两个问题:
int main()
{
unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
for (auto i = 0; i < sizeof(numbers); i++)
{
std::cout << numbers[i] << "\n"; // First Problem: Here i get
}
logger(numbers);
}
Run Code Online (Sandbox Code Playgroud)
传递numbers给logger定义为void logger(unsigned char data[])导致类型更改的原因unsigned char *所以没有办法迭代数组,因为大小是未知的.
我的目标也是传递任何大小的数组,但假设数组的大小始终为8,我将签名更改为
logger(&numbers)
void logger(unsigned char(*data)[8])
{
for (auto i = 0; i < sizeof(*data); i++)
{
std::cout << *(data[i]) << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
迭代data有第一个问题,输出是``
所以问题是;
cout …我不希望可以创建此类的对象,但在我的特殊情况下,我不知道如何防止这种情况。
我的想法是:
class abstract
{
private:
int foo;
public:
abstract();
virtual void useless_method_to_force_class_to_be_abstract() = 0;
virtual ~abstract();
};
Run Code Online (Sandbox Code Playgroud)
但这确实不是我认为的最佳实践......
是否有任何技巧可以构建一个概念,以便永远不会发生“我不知道应该将哪种方法设置为纯虚拟”的情况?