//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 *”一起工作,但这不是我的意图。
我的目标是为除我专门的类型之外的任何类型禁用此功能,同时禁用隐式类型转换。
对此有什么意见吗?有更好的做法吗?
我越来越多地使用模板,我确实从中看到了一些好处,但有时我仍然觉得自己很绝望。