C++ 11模板函数"隐含"将bitset <N>转换为"unsigned long"

Bil*_*ore 1 c++ bitset c++11

我可以创建一个C++ 11模板函数来显式地将bitset转换为unsigned long:

template<size_t N>
unsigned long U(bitset<N> x) {
    return x.to_ulong();
}

// Explicit conversion
unsigned long y = U(bitset<4>("1010"));
Run Code Online (Sandbox Code Playgroud)

有没有办法使用C++ 11模板帮助函数"隐式"将bitset转换为unsigned long.例如,如果我将一个bitset分配给unsigned long,那么我希望它自动将bitset转换为正确的类型:

// What Template Function in C++11?

// Implicit Conversion
unsigned long z = bitset<4>("1010");
Run Code Online (Sandbox Code Playgroud)

(如果不可能使用C++ 11模板函数创建一个隐式转换规则转换为"unsigned long",那么从bitset派生一个具有转换函数到unsigned long的新类也是可以接受的.这也可能吗? )

Max*_*kin 7

含蓄转换AB,无论是:

  • B必须有一个非显式构造函数A,或
  • A必须具有非显式转换operator B().

这两个都必须只是成员函数.

既然你无法修改std::bitsetunsigned long答案是:不,你不能隐式转换std::bitsetunsigned long.只是明确的.