2015-11-03 190 views
0

對於一個賦值,我必須按照一些明確的指令對矩陣類進行編碼。其中一個指令是超載的< <操作,這樣我們就可以讀出值的矩陣m這個確切的方法:C++ 11 <<運算符specefic超載

m << 1,2,3,4,5,6; 

我試圖尋找到具有可變參數的功能,但後來我看到了,我可以」用可變數量的參數超載操作員。

我試圖在尋找的std :: initializer_list,使用一些參考代碼cpp reference

std::vector<float> mat; 


Mat<M,N>& operator<<(std::initializer_list<float> l) 
{ 
    this->mat.insert(this->mat.begin(),l.begin(),l.end()); 

    return *this; 
} 

所以我的問題是,我可以用什麼類/類型的參數來實現這一點,選項,我想到了沒有工作,或者我沒有以正確的方式使用它們。

非常感謝。

編輯: 從@ bames53的偉大答案後,我試圖納入,它的工作很好!

+1

這是學校課程的一個複雜任務。無論如何,查找「運營商超載代理類型逗號」,並有樂趣:) –

+0

謝謝我試圖找到,我沒有找到關於超載逗號的很多信息:s不幸 –

+1

你只是在尋找五分鐘,但谷歌給「約218,000結果「爲我爲您提供的搜索字詞。花更長一點的研究。 –

回答

3

<<,更高的優先級,以便你的表達m << 1,2,3,4,5,6所做的是:

((((((m << 1), 2), 3), 4), 5), 6) 

在您需要m << 1返回代表在1已經閱讀操作的對象等字,並準備讀2。這種事通常是用「表達式模板」來完成的,但在你的情況下你並不需要模板。

您的使用情況將有一個區別,因爲您需要隨時修改對象,而通常的表達式模板會懶惰地操作,直到它們的對象在實際執行工作之前轉換爲最終結果類型爲止。

#include <iostream> 

// a type to do something with 
struct M { int i; }; 

// a type to represent the operations 
struct Input_operation { M &m; int count; }; 


Input_operation operator << (M &m, int i) { 
    m.i = i; 
    return {m, 1}; 
} 

Input_operation operator , (Input_operation op, int i) { 
    op.m.i += i; 
    op.count++; 
    return op; 
} 

int main() { 
    M m; 
    m << 1, 2, 3, 4, 5, 6; 
    std::cout << m.i << '\n'; 
} 
+0

感謝您的回答,我盡我所能瞭解您的代碼(我不會說我現在就這麼做),並運行一些測試以查看它是如何工作的:)!謝謝 –

+0

我試圖將其用於我自己的代碼中,其中有一個模板矩陣類和一個存儲元素的向量,我將編輯我的問題以獲得更清晰的代碼以顯示您 –

+0

非常感謝我收到了它!而且它現在可以在我的代碼中正常工作!我想知道是否有可能與我的班級內部的操作員做一個版本 –