类模板,该模板带有对正在定义的类的实例进行操作的函数模板参数

用户名

我想定义一个类模板,该类模板接受对正在定义的类的实例进行操作的函数模板参数。

这或类似的可能吗?

我知道我可以定义转换构造函数,但是由于从这个简化示例中不清楚的原因,我希望能够在不更改类定义或创建派生类型的情况下更改类的功能。

我知道我可以包括函数指针成员并使用setter来修复其功能,但是我更喜欢使用声明性typedef而不是通过编程来修复类的功能。

template 
    < typename T
    , MyClass<X> (to_X)(MyClass<T>)
    , MyClass<T> (from_X)(MyClass<X>)
    >
class MyClass {

    T value;

    MyClass(T v) : value(v) {}

    // is it possible to use to_X and from_X template args 
            // to declare member functions ...
}

MyClass<int> to_int(MyClass<std::string> value ) {

    // return result of conversion
}

MyClass<std::string> to_string(MyClass<int> value ) {

    // return result of conversion
}

MyClass<std::string, to_string, to_int> foo1 = 
        MyClass<std::string, to_string, to_int>("5");

MyClass<int, to_int, to_string> * foo2 = foo1.to_int();
Manu343726

我建议您使用策略类方法:将您的类模板参数化为两个转换策略

template<typename T,
         typename FROM,
         typename TO
        >
class MyClass
{
    FROM from_t_conversion;
    TO   to_t_conversion;

    MyClass() = default;

    template<typename U>
    operator U() const
    {
        return from_t_conversion( *this );
    }

    template<typename U>
    MyClass( const U& u ) : MyClass()
    {
        std::swap( *this , to_t_conversion( u ) );
    }
};

该设计的重点是转换策略的类型(形式):转换策略可以是具有预期签名的任何可调用实体:函数,函子,lambda等。

编辑:这是转换器的示例:

struct float_to_int
{
    MyClass<itn> operator()( const MyClass<float>& )
    {
        return MyClass<int>{};
    }
};

//A more generic conversion function:
template<typename T>
struct generic_to_converter
{
    template<typename U , typename X = T>
    MyClass<X> operator()( const MyCLass<U>& )
    {
        return /* something /*
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于模板参数构建带有一组函数重载的可变参数模板类?

来自分类Dev

在带有可变参数模板的基于模板的类中进行完善转发?

来自分类Dev

Java模板如何返回带有模板类型的函数参数类类型实例

来自分类Dev

无法在类中使用带有数组的函数模板作为参数

来自分类Dev

可变参数模板类参数容器实例化

来自分类Dev

可变参数模板类参数容器实例化

来自分类Dev

如何在类模板之外定义类模板的构造函数模板?

来自分类Dev

如何在类模板之外定义类模板的构造函数模板?

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

C++ - 在具有非类型模板参数的模板化类上专门化函数模板

来自分类Dev

具有嵌套类的变长参数模板类

来自分类Dev

可变参数模板类中的派生(虚拟)函数参数

来自分类Dev

可变参数模板类-可变参数成员函数

来自分类Dev

在C ++中的模板实例化中将带有构造函数的类用作类型参数

来自分类Dev

带有可变参数模板参数的重载函数

来自分类Dev

以可变参数类模板作为函数调用参数的函数模板参数推导

来自分类Dev

定义函数模板实例的std :: function指针时出错,它是模板化类的成员吗?

来自分类Dev

调用类内的函数的C ++ 11可变参数模板

来自分类Dev

使用模板参数实例化模板类

来自分类Dev

模板类复制构造函数参数是否带有模板参数?

来自分类Dev

基于模板变量参数的类模板中的函数指针定义

来自分类Dev

模板类的模板参数

来自分类Dev

带有指针模板参数的模板类的专业化

来自分类Dev

我可以在单一类型上定义可变参数模板函数吗?

来自分类Dev

带有模板类成员函数的 SFINAE

来自分类Dev

让需要单个模板参数的模板模板参数的类接受可变参数模板参数的模板模板参数?

来自分类Dev

不带有任意参数的c ++函数模板

来自分类Dev

使用带有可变参数模板类的boost mpl lambda

Related 相关文章

  1. 1

    基于模板参数构建带有一组函数重载的可变参数模板类?

  2. 2

    在带有可变参数模板的基于模板的类中进行完善转发?

  3. 3

    Java模板如何返回带有模板类型的函数参数类类型实例

  4. 4

    无法在类中使用带有数组的函数模板作为参数

  5. 5

    可变参数模板类参数容器实例化

  6. 6

    可变参数模板类参数容器实例化

  7. 7

    如何在类模板之外定义类模板的构造函数模板?

  8. 8

    如何在类模板之外定义类模板的构造函数模板?

  9. 9

    可变参数模板类的可变参数模板

  10. 10

    可变参数模板类的可变参数模板

  11. 11

    C++ - 在具有非类型模板参数的模板化类上专门化函数模板

  12. 12

    具有嵌套类的变长参数模板类

  13. 13

    可变参数模板类中的派生(虚拟)函数参数

  14. 14

    可变参数模板类-可变参数成员函数

  15. 15

    在C ++中的模板实例化中将带有构造函数的类用作类型参数

  16. 16

    带有可变参数模板参数的重载函数

  17. 17

    以可变参数类模板作为函数调用参数的函数模板参数推导

  18. 18

    定义函数模板实例的std :: function指针时出错,它是模板化类的成员吗?

  19. 19

    调用类内的函数的C ++ 11可变参数模板

  20. 20

    使用模板参数实例化模板类

  21. 21

    模板类复制构造函数参数是否带有模板参数?

  22. 22

    基于模板变量参数的类模板中的函数指针定义

  23. 23

    模板类的模板参数

  24. 24

    带有指针模板参数的模板类的专业化

  25. 25

    我可以在单一类型上定义可变参数模板函数吗?

  26. 26

    带有模板类成员函数的 SFINAE

  27. 27

    让需要单个模板参数的模板模板参数的类接受可变参数模板参数的模板模板参数?

  28. 28

    不带有任意参数的c ++函数模板

  29. 29

    使用带有可变参数模板类的boost mpl lambda

热门标签

归档