Có cách nào để tôi có thể trích xuất các loại từ chữ ký hàm trong biểu mẫu foo(bar)
và truy cập chỉ foo
hoặc bar
. Vì vậy, nếu tôi có mẫu:Bạn có thể trích xuất các loại từ chữ ký mẫu chức năng tham số
template<typename signiture>
class type{
};
nơi signiture là foo(bar)
và sau đó có một chức năng trong lớp mà đọc
foo function(bar b){
//do stuff
}
Tôi interfacing với std::function
và đã tìm thấy nó thuận tiện hơn để sử dụng foo(bar)
cú pháp thay vì sử dụng nhiều thông số mẫu như vậy:
template<typename return_t,param_tps... args>
class type{
return_t function(param_ps args...){
return something;
}
};
Hãy cho tôi biết nếu tôi có thể làm rõ? Cảm ơn trước.
EDIT: để làm rõ tôi quan tâm đến một hàm có số tham số N được xác định bởi bất kỳ trường hợp lớp cụ thể nào xác định.
EDIT 2: Mã rằng câu hỏi này được dựa tắt của là như sau:
using std::function;
template <typename signiture>
class Observer;
template <typename return_t, typename ...args_t>
class Observer<return_t(args_t...)> {
protected:
using signature = return_t(args_t...);
typedef function<signature> func_t;
~Observer(){}
func_t what_to_do;
public:
Observer(Subject<signature>& subject,func_t what):what_to_do(what){
subject.Attach(what_to_do);
}
return_t operator()(args_t... args){
what_to_do(args...);
}
};
using std::function;
using std::vector;
template <typename signature>
class Subject;
template <typename return_t,typename...param_tps>
class Subject<return_t(param_tps...)> {
using signature=return_t(param_tps...);
public:
void Attach(std::function<signature> o){
obs.push_back(o);
}
void operator()(param_tps... params){
for (typename vector<std::function<signature>>::const_iterator i=obs.begin(); i!=obs.end(); ++i) {
(*i)(params...);
}
}
protected:
~Subject(){}
vector<std::function<signature>> obs;
};
Đó là một thực hiện các mô hình Observer đó là không ảo sử dụng std::function
để keo việc cùng nhau giữa hai . Tôi muốn sử dụng cú pháp foo(bar)
vì mọi thứ đều có lợi cho việc sử dụng dễ dàng các lớp học. Sự cố đã chuyển đổi chữ ký loại hàm thành kiểu trả về và các kiểu tham số để chỉ định operator()
thích hợp trong lớp chủ đề để nó có thể thông báo cho các quan sát viên bằng đúng dữ liệu.
Những thay đổi đã được thực hiện dựa trên những nguồn ví dụ đưa ra dưới đây như sau:
template<typename t>struct type;
template<typename R,typename... args_t>
struct type<R(args_t...)>{
//use R and args_t as needed
}
Nhờ tất cả những ai giúp đỡ.
phần chuyên môn hóa? – Columbo
@Columbo ý bạn là gì? thí dụ? –
Xem câu trả lời ở dưới đó VVVV – Columbo