所以我想在模板类型 boost::is_convertibleWellKnownType 时应用特定代码:

template <typename T>
class Foo {
public:
    Foo() {
        // apply specific function to m_t
        // if T is convertible to WellKnownType
    }
    T m_t;
};

为此,我考虑使用仿函数:
template <typename T>
struct my_functor {
    void operator()(T& t) {
        // do nothing by default
    }
};

然后,我想在 boost::is_convertible<T, WellKnownType> 时专门化这个仿函数来做其他事情:
template <>
struct my_functor<...> {
    void operator()(T& t) {
        // do something to t because it is convertible to WellKnownType
    }
};

然后,我想我可以轻松地更改 Foo 定义以使用仿函数并在 T 可转换为 WellKnownType 时执行某些操作,而在不可转换为 BOOST_CONCEPT_REQUIRES 时不执行任何操作:
template <typename T>
class Foo {
public:
    Foo() {
        my_functor<T>()(m_t);
    }
    T m_t;
};

我不知道如何实现这种行为。我知道 ojit_code ,但不知道如何将它应用于模板特化。有什么帮助吗?

最佳答案

您可以使用您的仿函数执行以下操作

template<typename T, typename WellKnownType >
struct my_functor
{
    void operator()( const T& x) {
       myopImpl(x, boost::is_convertible<T, WellKnownType>() );
    }

    void  myopImpl(T const& x, boost::false_type)
    {  std::cout << "Some Other Stuff \n";  }

    void  myopImpl(T const& x, boost::true_type)
    { std:: cout << "Some Specific Stuff \n";  }

};

Demo here

关于c++ - 当模板类 is_convertible 为众所周知的类型时特化仿函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32675379/

10-11 15:30