[英]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.