Đây là một tiếp lên các vấn đề này: Generic functor for functions with any argument listLàm cách nào để nhận được các kiểu đối số của một con trỏ hàm trong lớp mẫu variadic?
Tôi có lớp này functor (mã đầy đủ thấy liên kết ở trên):
template<typename... ARGS>
class Foo
{
std::function<void(ARGS...)> m_f;
public:
Foo(std::function<void(ARGS...)> f) : m_f(f) {}
void operator()(ARGS... args) const { m_f(args...); }
};
Trong điều hành() Tôi có thể truy cập vào args ... một cách dễ dàng với chức năng "lột" đệ quy như được mô tả ở đây http://www2.research.att.com/~bs/C++0xFAQ.html#variadic-templates
Vấn đề của tôi là: Tôi muốn truy cập các loại đối số của f, tức là ARGS ..., trong hàm tạo. Rõ ràng là tôi không thể truy cập các giá trị bởi vì không có giá trị nào cho đến nay, nhưng danh sách kiểu đối số được bằng cách nào đó được chôn trong f, phải không?
Cảm ơn bạn @Nawaz, hoạt động cho đến nay. Tuy nhiên, tôi muốn trích xuất "ma thuật" ra khỏi giải pháp này và đặt nó vào mã của tôi. Tôi giả sử typename std :: tuple_element > :: type là nơi nó xảy ra ... Làm thế nào để làm điều đó mà không cần phải khai báo một cấu trúc khác – steffen
@steffen: Bạn có bất kỳ vấn đề trong việc xác định cấu trúc khác có thể được sử dụng trong các tình huống khác? Ngoài ra, đặt tất cả các mã trong một lớp học không phải là một ý tưởng tốt. Cố gắng chia mã thành các đơn vị làm việc nhỏ. – Nawaz
Tôi hiểu rõ vấn đề của bạn. Một câu hỏi cuối cùng là đoạn mã này từ thư viện tăng? function_traits có vẻ quen thuộc;) – steffen