仅允许特定的`typedef`作为函数参数

时间:2015-06-02 09:01:20

标签: c++ typedef

是否可以仅允许特定的<script> $(document).ready(function () { $("#radio1").on("click", function () { var value1 = $("#value1").value; if ($("#radio1").attr("checked") == 'checked') { value1.val("true"); } else { value1.val("false"); } }); }); </script> 作为函数参数?

typedef

如果不能简单地使用typedef int foo; typedef int goo; void f(goo g); //I don't want to accept anything `foo` as an argument ,我可以使用什么语言结构来实现这种效果?

2 个答案:

答案 0 :(得分:5)

不,它们不是不同的类型,只是同一类型的不同名称。

如果您希望它们是不同的类型,您可以将它们定义为结构:

struct foo
{
    explicit foo(int v) : value(v) {}
    int value;
};

struct goo
{
    explicit goo(int v) : value(v) {}
    int value;
};

void f(goo g);

// ...

foo a(23);
goo b(34);
f(b); // good
f(a); // bad
f(goo(45)); // good
f(foo(56)); // bad

或者你可以模板化:

template<typename T, typename tag>
struct newtype
{
    explicit newtype(const T& v) : value(v) {}
    T value;
};

struct foo_d {};
struct goo_d {};
typedef newtype<int, foo_d> foo;
typedef newtype<int, goo_d> goo;

答案 1 :(得分:0)

一个参数有一个类型,该函数允许声明的类型的任何参数,在你的情况下是int,尝试使用classes / structs