如何呼叫 a ,以 constexpr 方式static constexpr class::method (int i1, int i2, int i3)提供輸入資料。tuple<int, int, int>
默認方法是使用std::apply將每個元組元素作為引數應用到函式。
一個可視化的最小示例,我嘗試實作的目標如下:
struct a {
template <typename T>
static constexpr void test(int i1, int i2, int i3) {
// ...
}
};
struct b : a {};
struct c {};
template <typename T>
struct test_functor {
constexpr test_functor_t() {} // just for testing to express constexpr desire
constexpr void operator()(auto... args) {
T::test<c>(args...);
}
};
constexpr std::tuple<int, int, int> tupl{ 1,2,3 };
constexpr test_functor<b> f;
std::apply(f, tupl);
這在運行時有效,但無法編譯constexpr。如何實施?
uj5u.com熱心網友回復:
作業test_functor:
template <typename T>
struct test_functor {
constexpr void operator()(auto... args) const {
T::template test<c>(args...);
}
};
問題:
- 您的建構式命名錯誤,最終是不必要的——沒有建構式,您的型別是一個聚合,可以
constexpr很好地構造。 - 你
operator()不是const——主要問題,因為你不能在物件上呼叫非const成員。constexpr - 呼叫時缺少
template關鍵字T::test- 請參閱此常見問題解答以獲得對依賴名稱的良好解釋。
Online Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463687.html
上一篇:C 回傳0xC0000005狀態
