我通常從不寫C++,而今天我嘗試過使用C++模板進行實驗。我實現了一個也許鍵入它看起來像這樣無法推斷'std :: function'的模板參數
#include <functional>
#include <iostream>
#include <string>
template<typename T>
class TMaybe
{
T value;
public:
TMaybe() : value(nullptr){}
TMaybe(T &&v) : value(v){}
TMaybe(T v) : value(v){}
};
template<typename T, typename R>
TMaybe<R> maybe_if(const TMaybe<T> &m, std::function<R(T v)> f){
return (m.value != nullptr) ? TMaybe<R>(f(m)) : TMaybe();
}
int main(){
int i = 10;
auto m = TMaybe<int>(i);
auto plus_ten = [](int i) -> int {return i + 10;};
maybe_if(m, plus_ten); // could not deduce template argument for 'std::function<R(T)>' from 'main::<lambda_17413d9c06b6239cbc7c7dd22adf29dd>'
}
但錯誤信息could not deduce template argument for 'std::function<R(T)>' from 'main::<lambda_17413d9c06b6239cbc7c7dd22adf29dd>'
是不是非常有幫助。你能發現錯誤嗎?
這不是什麼'的std :: function'是。請將該參數改爲模板參數。 –
@ R.MartinhoFernandes你能告訴我這個語法嗎? –
即使在標記行之前,您仍然有編譯錯誤。你在使用微軟編譯器嗎?更重要的是,你的設計被打破了。 C++不是Java。你不能將'nullptr'推入任何隨機類型。嘗試實例化TMaybe或其他任何東西。 –