3

我遇到了一个角落案例并寻找解决方法。我几乎可以肯定这是一个编译器错误,我想不出任何东西。我有一个类,它可选地需要一个指向成员函数的指针。为了允许它是可选的,我将默认值设为 nullptr。它一直有效,直到我做了一个不相关的改变。在 Visual Studio 中,它现在会触发“无效的模板参数,需要编译时常量”。它仍然适用于 GCC。这是工作案例:

template<class Key_, 
         class Value_, 
         Key_ (Value_::*KeyFn_)() const = nullptr, 
         template <class ...> class Map_ = std::map>
class Hashmap { ... }

这是不起作用的情况

template<class Key_, 
         class Value_, 
         Key_ (Value_::*KeyFn_)() const = nullptr, 
         template <class ...> class Map_ = std::map, 
         class Comparator_=std::less<Key_>>
class Hashmap { ... }

出于某种原因,我无法将键检索与类型分开,因此即使在构造函数中提供 keyfn 很诱人,这也是不可能的。仅当 KeyFn_ 为 nullptr(或 0)时,第二个版本才会失败。如果我给它一个类成员,它编译得很好。

完整的源代码也可用:

http://sourceforge.net/p/gorgon-ge/code/ci/gscript/tree/

工作修订:

http://sourceforge.net/p/gorgon-ge/code/ci/77d287af75c2301fce55ab97ba49362f7ef6d9e0/tree/

我正在寻找解决方法,或者如果它根本不应该工作的解释。

4

0 回答 0