c++在模板函数中初始化大小为 "static * int"的char数组

标签 c++ arrays templates pointers static

是否可以在模板函数中初始化一个 char 数组,其大小包含在 static * int 中?

.header

static int * array_size;

template <class T>
void f(T value)
{
    char buffer[*array_size];
}

或者有没有办法初始化“array_size”,使模板有一个默认值可以使用?

最佳答案

static int * array_size 将不起作用,因为指针内的数据是可修改的,因此无法在编译时确定。

如果您使用的是 C++11,我建议您

constexpr int array_size = 42;

如果您不会使用 C++11,我会使用:

static const int array_size = 42;

在这两种情况下,您都可以像这样创建缓冲区:

char buffer[array_size];

所以没有星号。

如果您无法在编译时找出缓冲区的大小(因此大小取决于运行时的决定),您需要使用动态数组,最好封装到 std::vector :

std::vector<char> bufferVec(myDynamicSize); // Use any integer you want to
char *buffer = &bufferVec[0]; // Use this buffer as a standard array 
                              // with size myDynamicSize OR use the std::vector
                              // directly (much cleaner)

关于c++在模板函数中初始化大小为 "static * int"的char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987361/

相关文章:

c++ - 由于未签名,消除了模板化方法中的警告

类中defs的c++顺序,令人惊讶

c# - 当我从 C# 代码调用 C++ 代码时,它是线程安全的吗?

python - 如何为CNN输入python制作3维数组

java - 拼字游戏类型

c++ - 默认模板类型给出错误但显式类型没有

将模板化类作为参数的 C++ 方法

c++ - 我可以获取在重载的新运算符中使用新运算符的对象类型吗?

javascript - 3维数组到对象数组

javascript - 带有 dom-repeat 的 Polymer 1.0 动态模板