在构造函数中接受某些类型

发布于 2024-11-15 19:26:18 字数 516 浏览 0 评论 0原文

作为此内容 问题,如何更改代码以便我可以在类的构造函数中使用它?我正在编写一个新类,其中输入需要是某种数字,但没有其他。然而,代码就像在函数前面声明类型一样。由于构造函数并不完全具有类型,因此我需要它不要为

我的新类的函数本身声明类型:

class C{
     public:
         C();
         C(T value);// specifically looking for this


         T f(T value); // what the code currently does

};

链接中的代码创建一个[接受并]返回整数类型 T 的函数。我需要它根本不返回任何内容,以便它可以与构造函数一起使用

as a follow up to this question, how can the code be changed so that i can use it in the constructor of a class? im writing a new class where the input needs to be an number of some kind, but nothing else. the code, however, is like declaring the type in front of a function. since constructors dont exactly have types, i need it to not declare a type for the function itself

my new class:

class C{
     public:
         C();
         C(T value);// specifically looking for this


         T f(T value); // what the code currently does

};

the code in the link creates a function that [accepts and] returns an integer type T. i need it to not return anything at all, so that it can be used with a constructor

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷途知返 2024-11-22 19:26:18

我认为您想限制构造函数模板的类型。如果是这样,那么您可以这样做:

#include <type_traits>
//#include <tr1/type_traits> // for C++03, use std::tr1::

class C
{
  public:

     template<typename T>
     C(T value, typename enable_if<std::is_arithmetic<T>::value,T>::type *p=0)
     {

     }
};

此构造函数模板只能接受那些 is_arithmetic::valuetrueTenable_if 的实现完全相同,如 另一个答案


或者,如果您没有 type_traits,则可以将 typelistenable_if 一起使用。我认为这是一个更好的解决方案,因为您可以专门定义支持的类型列表。

typedef typelist<int> t1;
typedef typelist<short, t1> t2;
typedef typelist<char, t2> t3;
typedef typelist<unsigned char, t3> t4;
//and so on

typedef t4 supported_types;//supported_types: int, short, char, unsigned char

class C
{
  public:

     template<typename T>
     C(T value, typename enable_if<exits<T,supported_types>::value,T>::type *p=0)
     {

     }
};

此构造函数模板只能接受那些 exists::valuetrueTexists 元函数检查 T 是否存在于类型列表 supported_types 中,或者不存在。您可以向此类型列表添加更多类型

typelistexists 的实现在这里(请参阅我的解决方案):

I think you want to restrict types for constructor template. If so, then you can do this:

#include <type_traits>
//#include <tr1/type_traits> // for C++03, use std::tr1::

class C
{
  public:

     template<typename T>
     C(T value, typename enable_if<std::is_arithmetic<T>::value,T>::type *p=0)
     {

     }
};

This constructor template can accept only those T for which is_arithmetic<T>::value is true. The implementation of enable_if is exactly same, as given in the other answer.


Alternatively, or if you don't have type_traits, then you can use typelist along with enable_if. I think this is a better solution, as you can specifically define the supported typelist.

typedef typelist<int> t1;
typedef typelist<short, t1> t2;
typedef typelist<char, t2> t3;
typedef typelist<unsigned char, t3> t4;
//and so on

typedef t4 supported_types;//supported_types: int, short, char, unsigned char

class C
{
  public:

     template<typename T>
     C(T value, typename enable_if<exits<T,supported_types>::value,T>::type *p=0)
     {

     }
};

This constructor template can accept only those T for which exists<T,supported_types>::value is true. The exists metafunction checks whether T is existing in the typelist supported_types or no. You can add more types to this typelist.

And the implementation of typelist, and exists is here (see my solution):

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文