簡體   English   中英

顯式 int 類型作為參數

[英]Explicit int type as parameter

是否可以將函數編寫為:

void func(uint64_t val) {template <typename T>

void call_with(std::function<void(T)> f, T val) { f(val); }

int main() { auto print = [](int x) { std::cout << x; }; call_with(打印,42); }}

如果在不修改我的#pragma警告的情況下使用uint64_t以外的任何其他整數類型調用它,則會生成編譯時錯誤?

IE:

uint32_t x = 0;
func(x) {…} // Error!
func(uint64_t(x)) {…} // Succes!

使用函數模板重載函數。 函數模板將更好地匹配除uint64_t之外的所有參數類型。 您可以定義函數模板,以便在使用時產生錯誤。

void func(uint64_t val) { ... }

template <typename T>
void func(T)
{
    static_assert(false, "argument type is not uint64_t");
}

對於 C++11,您可以使用以下模板:

template <typename T>
void func(T&&) = delete;

這會起作用:

template< typename T >
void func( T param );

template<>
void func<uint64_t>( uint64_t param )
{
}

你會得到一個鏈接器錯誤(足夠接近)。 示例:http: //ideone.com/5ft4F

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM