template<class Key1, class Key2, class Type> class DualMultimapCache
{
public:
std::list<std::reference_wrapper<Type>> get(Key1 const & key);
std::list<std::reference_wrapper<Type>> get(Key2 const & key);
template<class ...Args> Type & put(Key1 const & key, Args const & ...args);
template<class ...Args> Type & put(Key2 const & key, Args const & ...args);
};
Run Code Online (Sandbox Code Playgroud)
在这里,我有一个类的公共接口.基础数据结构无关紧要.一切都将只是正常工作时Key1,并Key2有不同的类型.如果它们最终成为相同的类型,则过载可能是不可能的.我这是对的吗?
如果我是,有没有办法分离过载,同时保持签名尽可能干净?
编辑:这是一个更深入的样本
template<class Key1, class Key2, class Type> class DualMultimapCache
{
public:
std::list<std::reference_wrapper<Type>> get(Key1 const & key);
std::list<std::reference_wrapper<Type>> get(Key2 const & key);
template<class ...Args> Type & put(Key1 const & key, …Run Code Online (Sandbox Code Playgroud) c++ templates overloading overload-resolution class-template
pkwargs = dict(("tickNum", tickNum), **kwargs)
Run Code Online (Sandbox Code Playgroud)
在这里,我将元组中的键值对添加到键值对列表中,并将其作为新的dict输出.它提出了ValueError: dictionary update sequence element #0 has length 7; 2 is required.
pkwargs = dict(("tickNum", tickNum), kwargs)
Run Code Online (Sandbox Code Playgroud)
在这里,我将相同的键值对添加到dict,而不是将其作为新的dict输出.它提出了TypeError: dict expected at most 1 arguments, got 2.
我不明白为什么......我也不知道如何解决这个问题.