boost-proto

    4熱度

    1回答

    在測試聚集類型時,我嘗試使用boost :: proto :: is_aggregate來檢查我創建的類型是否真正聚合。我寫了這個代碼: #include <iostream> #include <boost\proto\traits.hpp> struct IsAggregate { IsAggregate &operator=(IsAggregate const &rhs)

    6熱度

    2回答

    我想使用Boost.Proto將嵌入式領域特定語言轉換爲用Eigen庫實現的一系列矩陣操作。由於效率很重要,我希望proto生成特徵表達模板並避免過早評估。 我已經實現了一個可以生成矩陣乘法表達式的簡單語法。下面的代碼在沒有警告的情況下編譯(在g ++ 4.8.0和Intel C++ 2013.3上,使用Boost 1.54.0和Eigen 3.1.3)並且只要我的表達式只有一個乘法操作就可以工作

    1熱度

    1回答

    我試圖將懶惰評估引入到現有的代碼項目中。項目核心基本上包含大量使用自定義類型的計算(它的行爲類似於double,但在後臺執行額外的工作)。 我們的目標是引入懶惰的評估概念,使用boost proto來優化現有表達式。 限制: 現有的計算不能觸及 使用由一個typedef定義的,所以更換類型本身的類型可能 我們試圖實現概念的簡單證明,但沒有管理代碼的行爲如預期。這就是我們走到這一步: #includ

    1熱度

    1回答

    是否可以提取Boost.Proto表達式樹的某些部分,單獨評估它們(外部),然後改變表達式樹,用結果替換提取的部分? 在我的特定情況下,我想,以評估,如果我可以重寫一些遺留代碼重複: 生成SQL 查詢數據庫 使用結果生成一個新的SQL查詢 再次查詢數據庫 ... (等) 我希望做的事情是: 1.生成單個大型表達式樹 2.從表達式樹中獲取SQL。這包括: b。訪問樹並檢查必須評估的子查詢,然後才能生

    2熱度

    2回答

    我想通過使用模板參數來指定do_eval變換的返回類型(到目前爲止double)基於Boost Proto「Unpacking Expressions」示例從here開始構建。 爲了簡便起見,我將介紹一個工作,簡化(加只)版本的do_eval: struct do_eval2 : proto::callable { typedef double result_type; te

    5熱度

    1回答

    我有一個功能foo()正在庫中提供的上下文。該庫定義過載了一把用於此功能,如: char foo(float x, int y); short foo(double x, char y); (I由上面的說法/結果類型向上的外賣是不存在的參數類型和過載的相應之間的通用關係返回類型)。 這個想法是,庫用戶可以根據需要爲其自己的用戶定義類型添加foo()的重載。函數重載很容易完成這一點。 我想使f

    3熱度

    1回答

    使用現有的Boost Phoenix(佔位符)參數(例如_1),我可以使用數組/下標運算符。例如,以下摘錄將顯示1。 int arr[4] = {1,2,3,4}; std::cout << _1[0](arr) << std::endl; 但是,如果我定義自己的佔位符參數: phoenix::actor<phoenix::expression::argument<1>::type> con

    0熱度

    1回答

    當「內部」局部變量隱藏「外部」局部變量時,我在Boost Phoenix中嵌套的let塊出現問題。即使從文檔here的「能見度」的例子,如下所示: #include <iostream> #include <boost/phoenix.hpp> namespace phoenix = boost::phoenix; using namespace phoenix::local_names;

    1熱度

    1回答

    Boost Proto表達式中,我何時不應該期待proto_tag成員?我可以就一個佔位符,說的標籤類型查詢,使用下列方法之一: typedef proto::tag_of<decltype(_1)>::type ta; typedef decltype(_1)::proto_tag tb; 但如果我問一個表達式的孩子的標籤類型,看來該proto_tag成員不存在;和下面的代碼的第三行給

    1熱度

    1回答

    爲什麼以下Boost.Proto語法匹配解除引用運算符,以及 正確的方法是什麼? #include <iostream> #include <boost/proto/proto.hpp> namespace proto = boost::proto; using proto::_; struct has_deref : proto::or_< proto::dereferen