如何根据条件调整 const char* 数组的大小?

问题描述 投票:0回答:1

如何根据条件调整

const char* []
数组的大小?

const char* arr[] = (some_condition ? {"ta", "ta"} : {"wo", "lo", "lu"});

错误:‘{’标记之前需要主表达式 (...)
错误:‘{’标记之前应有‘:’ (...)
错误:‘{’标记之前需要主表达式 (...)
错误:从“char**”到“const char**”的无效转换[-fpermissive]


我正在使用外部 api,它接受

const char* argv[]
作为输入。基于存储在更理智的数据结构中的变量,如
std::string
,我构造了这个输入变量,但我显然无法正确地这样做。

老实说,问题的根源归结为一个可选的麻烦参数。以下作品(有些)..

bool use_optional = false;
std::string optional = "blah";

const char* arr[] = {
    "arg1",
    (use_optional ? optional.c_str() : ""),
    "arg3" 
};

此解决方案的问题是我在

arr
中得到一个空条目,即
{"arg1", "", "arg3"}
,我非常希望避免这种情况。

c++ arrays c++11 conditional-operator
1个回答
2
投票

作为解决方法,您可以创建 2 个不同的数组,并在它们之间切换:

const char* arr1[] = {"ta", "ta"};
const char* arr2[] = {"wo", "lo", "lu"};
auto arr = some_condition ? arr1 : arr2;

另一种可能性是使用向量:

std::vector<const char*> varr;
varr.push_back("arg1");
if (use_optional) varr.push_back(optional.c_str()),
varr.push_back("arg3");
auto arr = &varr[0];
© www.soinside.com 2019 - 2024. All rights reserved.