![](/img/trans.png)
[英]using std::result_of to determine the return type of a template argument
[英]Using template type as argument to std::invoke
考慮這段代碼:
using namespace std;
struct FS
{
void print() { cout << "p\n"; }
int s;
};
template <typename T, typename F>
void myInvoke(T& t, F f)
{
invoke(f, t) = 10;
}
int main(int, char**)
{
FS fs;
myInvoke(fs, &FS::s);
cout << fs.s << "\n";
}
有沒有辦法避免將class 成員指針傳遞給myInvoke的運行時成本?
我當然可以:
template <typename T>
void myInvoke(T& t)
{
invoke(&T::s, t) = 10;
}
// then call with
myInvoke(fs);
我想做的事:
template <typename T, typename P, P FS::* f>
void myInvoke(T& t)
{
invoke(f, t) = 30;
}
// call with:
myInvoke<FS, int ,&FS::s>(fs);
但沒有類型名 P 。 有什么方法可以使調用更簡潔,以便可以通過以下方式調用:
myInvoke<FS, &FS::s>(fs);
我知道這有點神秘,但盡可能簡潔真的很好。 尤其是當您擁有廣泛使用的庫函數時。
編輯:鏈接到上面代碼的沙箱: https://godbolt.org/z/z4cGdPd3r
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.