[英]C++ Function overloading template value
我一直難以獲得要使用默認值聲明的模板化函數。
我不是在尋找像void do_thing<int val = 2>() {
,而是在函數中使用void do_thing<2>() {
類的語法來覆蓋另一個模板化函數。
我知道這對於像這樣的類是可能的,例如( 來自教程 ):
template< int i >
class FACTOR{
public:
enum {RESULT = i * FACTOR<i-1>::RESULT};
};
class FACTOR< 1 >{
public:
enum {RESULT = 1};
};
引用FACTOR <1>的位置不會轉到上面的類聲明,而是轉到底部。
對我來說,問題是我不能在聲明函數時做同樣的事情。 我的語法錯誤或無法實現。
這是我嘗試使用的代碼示例:
template<int tokens>
void skip_token() {
for(int i = 0; i++ < tokens;) gettoken();
}
void skip_token<2>() {gettoken(); gettoken();};
在聲明語法中,它與上面的代碼幾乎相同,除了它會產生一個編譯器錯誤,告訴我我格式化模板錯誤。
如果可能的話,然后讓我知道(怎么樣,當然)。 否則,請讓我知道是否不是這種行為。
編輯: 固定!
要修復它,需要一個函數原型作為這兩個模板化函數的基礎。 如template<int tokens> void skip_token();
在頭文件或以上聲明中。
另外,在void skip_token<2>()
之前必須有template<>
。
這些僅是示例。 對於閱讀此問題的人來說,用適合您需求的代碼替換此代碼相當容易。
這是那種你要找的東西嗎? (我知道一個單獨的例子,但仍然...)?
#include <iostream>
#include <cstdlib>
void gettoken()
{
std::cout << "gettoken" << '\n';
}
// general decl
template<size_t n> void skip_token();
// impl
template<size_t n>
void skip_token()
{
gettoken();
skip_token<n-1>();
}
// specialize
template <>
void skip_token<1>()
{
gettoken();
}
int main()
{
skip_token<4>();
return EXIT_SUCCESS;
}
產量
gettoken
gettoken
gettoken
gettoken
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.