C ++:泛型类中的非泛型方法?

阿卡什·鲁佩拉(Akash rupela)

我有兴趣为仅针对特定数据类型的通用类定义自定义方法。我不确定什么是实现它的好方法。如果将其放在类之外,则将无法访问类变量,因此我认为我永远无法使它以这种方式工作。如果我将其放置在类中,则意味着它适用于任何T类型,而不仅仅是特定类型。通过定义代码的通用版本并仅发送该类型作为我感兴趣的输入,我已经能够使代码以后一种方式工作,但是有没有更整齐的方法来实现此目的?

下面是一些代码,以使其清楚

#include<iostream>
#include<string>
using namespace std;

template<typename  T>
class abc
{
public:
    void myvoid();
};

template<typename string>
void abc<string>::myvoid()
{
    cout<<"This portion should execute only if an instance of class is called with a    string parameter" ;
}

int main()
{
abc<int> int1;
abc<string> string1;
string1.myvoid(); //should work good
int1.myvoid(); //shouldnt execute myvoid
}  
juanchopanza

static_assert如果所讨论的方法使用了错误的类型,则可以使用它来防止编译:

#include <type_traits> // for std::is_same

template <typename T>
struct Foo
{
  void foo() const {}
  void bar() const
  {
    static_assert(std::is_same<T, int>::value, "T is not int");
  }
};

int main()
{
  Foo<double> fd;
  fd.foo();       // OK
  //fd.bar();     // ERROR: bar() only works with Foo<int>
  Foo<int> fi;
  fi.foo();       // OK
  fi.bar();       // OK
}

或者,您可以使用SFINAE来控制所涉及方法的类型。

template <typename T>
class Foo
{
 public:
  void foo() const {}

  template<typename T2 = T,
           typename = typename std::enable_if<std::is_same<T, int>::value>::type>
  void bar() {}
};

请参阅此相关问题

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中的泛型类

来自分类Dev

C ++中的泛型方法

来自分类Dev

C ++中的泛型方法

来自分类Dev

C#泛型并使用类型化方法中的非泛型版本

来自分类Dev

c#中具有泛型类的泛型方法

来自分类Dev

C#在方法调用中扩展泛型类

来自分类Dev

在C#中创建泛型类的字典的辅助方法

来自分类Dev

C#在方法调用中扩展泛型类

来自分类Dev

C#中的静态泛型方法

来自分类Dev

在C#中调用泛型方法

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

C#泛型类作为参数,与泛型类的调用方法具有相同的T

来自分类Dev

如何在C#中的泛型类中使用泛型类的对象?

来自分类Dev

嵌套泛型/抽象类C#中的嵌套泛型的继承

来自分类Dev

c#获取泛型类中泛型类型参数的名称

来自分类Dev

CLI / C ++接口类,泛型方法调用模板方法

来自分类Dev

在C#中访问非泛型类型

来自分类Dev

具有两个泛型参数的C#中的泛型方法

来自分类Dev

C#中的多类泛型集合

来自分类Dev

C#覆盖泛型类中的基类属性

来自分类Dev

在C#中实例化泛型类

来自分类Dev

C#中的多类泛型集合

来自分类Dev

C ++ / Qt中具有泛型的抽象类

来自分类Dev

如何在C#中遍历泛型类的属性?

来自分类Dev

将引用转换为C#中的泛型类

来自分类Dev

C#如何在方法中获取泛型类引用

来自分类Dev

非泛型类中的泛型方法

来自分类Dev

非泛型类中的泛型方法

来自分类Dev

泛型类的字段约束 - C#