Tôi muốn tạo lớp mẫu có thể lưu trữ con trỏ hàm và đối số cho hàm này để hàm có thể được gọi sau đó với đối số này.Làm thế nào để lưu số lượng đối số biến bằng cách sử dụng các đối số mẫu của Denisdic?
Tôi muốn viết điều này một cách phổ biến và không phụ thuộc vào các loại đối số hoặc số.
Đây là một scatch của ý tưởng với việc sử dụng các mẫu variadic của C++ 11:
template<class T, typename... Params>
class LazyEvaluation {
private:
// Function to be invoked later
T (*f)(Params...);
// Params for function f
Params... storedParams; // This line is not compilable!
bool evaluated;
T result;
public:
// Constructor remembers function pointer and parameters
LazyEvaluation(T (*f)(Params...),Params... params)
: f(f),
storedParams(params) //this line also cannot be compiled
{}
// Method which can be called later to evaluate stored function with stored arguments
operator T&() {
// if not evaluated then evaluate
if (! evaluated) {
result = f(storedParams...);
evaluated = true;
}
return result;
}
}
Tôi muốn có ít nhất giao diện của công chúng về an toàn kiểu lớp này nếu nó là có thể. Mặc dù nhận được công việc này ít nhất là bằng cách nào đó là quan trọng hơn.
Tôi đã quản lý để lưu số lượng đối số biến bằng cách nào đó. Nhưng tôi không thể chuyển chúng đến hàm f. Tôi sẽ viết nó cho câu trả lời, nhưng tôi muốn bạn suy nghĩ về các giải pháp của riêng bạn trước khi bạn thấy nỗ lực không hoạt động xấu xí của tôi.
Tôi đang tring để biên dịch mã ở trên với Microsoft Visual C++ Compiler tháng 11 năm 2012 CTP (v120_CTP_Nov2012), nhưng nó sẽ là tốt nhất nếu một giải pháp độc lập trình biên dịch sẽ tồn tại.
Cảm ơn bạn
Tôi cho rằng đây là bản sao: http://stackoverflow.com/questions/14833129/a-clean-way-to-store-a-function-and-its-arbitrary-type-arbitrary-number-argum – hmjd
Lưu trữ chúng trong một 'std :: tuple' ... –
kennytm
@KennyTM Đó phải là câu trả lời. – Angew