这是否是确保隐式类型转换不会发生的合法方法?
#include <string>
#include <iostream>
void func(std::string s)
{
std::cout << "Thanks for the string\n";
}
template<class T>
void func(T)=delete;
int main()
{
func("test1");
// str.cc: In function ‘int main()’:
// str.cc:13:16: error: use of deleted function ‘void func(T) [with T = const char*]’
// func("test1");
// ^
// str.cc:9:6: error: declared here
// void func(T)=delete;
// ^
//
func(std::string("test2"));
return 0;
}
答案 0 :(得分:8)
对我来说很好。
答案也是如此。
答案 1 :(得分:1)
是的,该方法可确保不允许隐式转换。但是,这也意味着此属性不是仅由void func(string)
的定义引起的。因此,为了向读者阐明这一点,您可以使其更加独立,如下所示:
template <typename T, typename U> using RequireExplicit = enable_if_t<is_same<T, U>>;
template <typename T, typename = RequireExplicit<T, string>>
void func(T){}