0
//my_utils.h
namespace A {
 namespace B {
  template <typename T, typename U>
  T encode( U value ) = delete;
  
  template <typename T, typename U>
  U decode( T value ) = delete;

  uint8_t encode( bool value );

  bool decode( uint8_t value );
  .
  .
  .
  //in this same .h file
  template <typename T>
  class X {
    public:
     void func() {
       uint8_t a = encode(bool_var);
     }
  };
 }
}

//myutils.cpp
namespace A {
 namespace B {
  
  uint8_t encode<uint8_t, bool>( bool value ) {
    //do something
  }

  bool decode<uint8_t, bool>( uint8_t value ) {
    //do something
  }

 }
}

它以这种方式工作,但我想知道......这是正确的方式吗?我花了很多时间试图让它与模板专业化一起工作,但我就是想不通。例如,它与“const char *”一起工作,但这不是我的意图。

我的目标是为除我专门的类型之外的任何类型禁用此功能,同时禁用隐式类型转换。

对此有什么意见吗?有更好的做法吗?

我越来越多地使用模板,我确实从中看到了一些好处,但有时我仍然觉得自己很绝望。

4

0 回答 0