我必须编写一个函数(c ++),其定义是:
const char* getFileName(const char* name);
Run Code Online (Sandbox Code Playgroud)
为了简化,这个函数将取名,检查一些条件并附加一个后缀,使其成为一个正确的文件名.例如:
name ="someFile",return ="someFile-hd.png"
const char*由此函数返回的函数将立即传递给另一个函数,该函数const char*作为参数
something->loadFile(getFileName("someFile"));
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我const char*在我的函数中创建一个范围时,它的范围仅限于它所创建的函数.另一方面,我无法修改loadFile函数代码,因为它是第三方库我我正在使用.
我可以编写一个包装loadFile来删除const char*我创建的包装,但我不想这样做,因为这是一个移植练习,这会打破我创建的一些模板,使其更容易.
有没有办法像我所描述的那样编写这个函数?
谢谢
编辑:小解释:
getFileName是我正在尝试编写的函数,我可以更改返回类型,但它必须适合作为参数才能loadFile运行.我的主要问题是const char*返回的getFileName要么丢失了,因为它超出了范围,要么我必须明确删除它,这会破坏我的移植模板.我想在一个函数调用中生成文件名而不对它做任何其他事情[换句话说,在原始代码中我有loadFile("something.png"),我想在loadFile(getFileName("something"))不添加任何新行之后将其更改为.
如果你可以改变的返回类型getFileName()是std::string你可以做到以下几点:
std::string getFileName(const char* a_name)
{
std::string result(a_name);
result += ".png";
return result;
}
// No memory management req'd
something->loadFile(getFileName("someFile").c_str());
Run Code Online (Sandbox Code Playgroud)