如果我有一個函數,我怎樣才能傳入一個C++ 11隨機數生成器(如std::mt19937)作爲參數傳遞給非模板函數,而不會強制調用者使用哪個RNG?你如何通過<random> RNG作爲非模板函數的參數?
它似乎不像C++ 11隨機數生成器共享一個共同的基礎。 我是不是強制要麼使用模板,要麼強制使用特定的生成器?
有一兩件事我想是在將它作爲std::function<int()>
,但是,唉,諸如此類的std :: uninform_distribution需要operator()
,max()
和min()
爲成員函數。
如果像std::uninform_distribution
這樣的東西期望並需要一個通用的接口,是否有一些生成器繼承的基礎接口,我可以將它作爲通用引用?
你有什麼反對使用模板參數? –
@JosephMansfield因爲如果它是一個模板函數,那麼我必須把它放在頭文件中(或者跳過箍筋),如果我必須把它放在頭文件中,那麼我必須包含其他東西功能需求,減慢構建時間。我不反對模板功能 - 我很多地使用它們!只是在這種情況下,看起來相當愚蠢的是沒有共同的接口,除了採用這個參數之外,整個功能根本不需要成爲模板。通過作爲模板函數,我必須減少預先聲明的數量以支持#includes。 –
我只是直接傳遞std :: mt19937,謝謝。 –