Нет, вы не можете использовать явное, но вы можете сделать это вместо:
class ClassThatOnlyTakesBoolsAndUIntsAsArguments
{
public:
void Method(bool arg1);
void Method(unsigned int arg1);
// Below just an example showing how to do the same thing with more arguments
void MethodWithMoreParms(bool arg1, SomeType& arg2);
void MethodWithMoreParms(unsigned int arg1, SomeType& arg2);
private:
template<typename T>
void Method(T arg1);
// Below just an example showing how to do the same thing with more arguments
template<typename T>
void MethodWithMoreParms(T arg1, SomeType& arg2);
};
Повторите этот шаблон для каждого метода, который принимает bool
или unsigned int
. Не предоставляйте реализацию для шаблонной версии метода.
Это заставит пользователя всегда явно вызывать версию bool или unsigned int.
Любая попытка вызвать Method
с типом, отличным от bool
или unsigned int
, не удастся скомпилировать, поскольку член является частным, конечно, с учетом стандартных исключений из правил видимости (друг, внутренние вызовы и т. Д.) .). Если что-то, имеющее доступ, вызывает закрытый метод, вы получите ошибку компоновщика.