标题说真的。示例代码,说明事件的精神ep>
if( std::is_constructible<T, unsigned long>::value )
{
unsigned long identity = collection.rbegin()->first + 1;
std::shared_ptr<T> newObject(new T(identity));
collection.insert( identity , newObject );
return true;
}
else
{
return false;
}
答案 0 :(得分:3)
标签发送。
template<class T>
bool foo_impl(std::true_type){
unsigned long identity = collection.rbegin()->first + 1;
std::shared_ptr<T> newObject(new T(identity));
collection.insert( identity , newObject );
return true;
}
template<class T>
bool foo_impl(std::false_type){
return false;
}
template<class T>
bool foo(){
return foo_impl<T>(std::is_constructible<T, unsigned long>());
}
答案 1 :(得分:2)
由于if
语句可以在编译时确定,我希望编译器很聪明并直接对其进行优化,就好像你有类似的东西一样
if ( true ) {
// Some code
}
else {
// Anything here any decent compiler will ignore.
}
另一种选择是在函数中包含所需的行为,并使用std::enable_if
:
template <typename T, typename = typename enable_if<is_constructible<T, int>::value>::type>
bool foo() {
return true;
}
template <typename T, typename = typename enable_if<!is_constructible<T, int>::value>::type>
bool foo() {
return false;
}
// ...
return foo<T>();
另一种选择是专注于布尔值:
template <bool b> bool foo();
template <>
bool foo<true>(){
return true;
}
template <>
bool foo<false>() {
return false;
}