隐式转换为任何模板类型

时间:2014-10-23 00:20:42

标签: c++ templates c++11 type-conversion

作为method to check the existence of specific free functions的一部分,我有一个可以隐式转换为任何其他类型的类型:

struct AnyConvert
{
  template <class Dest>
  operator Dest & ();

  template <class Dest>
  operator Dest const & () const;
};

我在函数参数中使用AnyConvert作为选项,我在检查函数是否存在时并不挑剔。请注意,此类型仅在编译时用于元编程。

除以下情况外,此方法效果很好:

template <class T> struct SomeType {};

template <class T>
int someFunction( SomeType<T> );

int someOtherFunction( SomeType<int> );

decltype( someOtherFunction( AnyConvert() ); // works
decltype( someFunction( AnyConvert() ); // does not work

我对AnyConvert应该转换为的类型没有任何先进的知识。我也无法修改它应该隐式转换为的类型。我尝试添加以下功能:

template <template <typename> class Dest, class ... T>
operator Dest<T...> & ();

AnyConvert,但这似乎也无法解决问题。生成的编译器错误往往类似于:

‘AnyConvert’ is not derived from ‘SomeType<T>’

所以我的问题是: 如何在未指定模板类型时创建将隐式转换为模板化类型的类型?可能会发现这是不可能的,在这种情况下,我需要提出一种更好的方法来检查函数参数的子集是否正确。

0 个答案:

没有答案