我想写一个故障安全访问的函数std::map.
在我的代码中的许多地方我想访问一个std::map按键,但是如果密钥不存在,我希望有一种默认值而不是异常(这是很多"无"的代码).
我写了这个基于模板的功能
template <typename T1, typename T2>
T2 mapGetByKey(std::map<T1, T2>& map, T1 key, T2 defaultValue={})
{
auto it = map.find(key);
if (it != map.end())
{
return it->second;
}
return defaultValue;
};
Run Code Online (Sandbox Code Playgroud)
它很棒.但对于std::map<int, const char*>我想要有不同的行为.所以我可以添加这个专业化:
template <typename T1>
const char* mapGetByKey(std::map<T1, const char*>& map, T1 key, const char* defaultValue="")
{
auto it = map.find(key);
if (it != map.end())
{
return it->second;
}
return defaultValue;
};
Run Code Online (Sandbox Code Playgroud)
它也有效.但我认为这只是一个案例的代码.
有没有人知道如何保存行而不设置defaultValue来""进行调用std::map<int, const char*>?
有没有办法在编译时区分类型,可能有一些 …
我快疯了。
有没有什么方法可以使用作曲家的自动加载功能来加载没有(!)类的文件,只包含带有函数的命名空间,但动态加载?
想象一下我将库中的文件 1 (Foo.php) 放入私有作曲家存储库中:
namespace Foo;
function a() {
//...
}
Run Code Online (Sandbox Code Playgroud)
和文件 2 再次通过 Composer 使用该库:
require(.../autoload.php);
\Foo\a();
Run Code Online (Sandbox Code Playgroud)
我希望作曲家生成自动加载功能,仅当我从中调用函数等时才加载“Foo.php”。
但我不想将 Foo.php 包装到一个类中。