1
是否可以只允許特定的typedef
作爲函數參數?僅允許將特定的`typedef`作爲函數參數
typedef int foo;
typedef int goo;
void f(goo g); //I don't want to accept anything `foo` as an argument
如果無法簡單地用typedef
,我可以用什麼語言結構來達到這個效果?
是否可以只允許特定的typedef
作爲函數參數?僅允許將特定的`typedef`作爲函數參數
typedef int foo;
typedef int goo;
void f(goo g); //I don't want to accept anything `foo` as an argument
如果無法簡單地用typedef
,我可以用什麼語言結構來達到這個效果?
不,它們不是不同的類型,只是同一類型的不同名稱。
如果你想他們是不同類型的,你可以將它們定義爲結構:
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
或者你可以templateify:
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;
的爭論有一個類型,該功能允許任何參數在你的情況下聲明爲int的類型,請嘗試使用類/結構體
使用'struct goo {.....};'而不是定義任何轉換構造函數 –
如何傳遞'foo任何辦法? 'f(1)'好嗎?實際的參數將是一個表達式,而不是一個標識符。 – MSalters
或者使用'enum class goo {....};' –