2016-01-11 5 views
4

Я АНИ, который принимает два-структуру в качестве аргументовЛучший способ обеспечить аргумент функции

struct bundle{ 
int a; 
int b; 
int c; 
}; 

void func(const bundle& startBundle, const bundle& endBundle); 

Также я должен написать еще один API, который имеет те же требования, но вместо Int А в расслоении структуры должна быть двойной ,

Я могу написать 2 structs (1 для int и 1 для double), но это кажется не очень хорошим, и если я использую struct, функции имеют слишком много аргументов (3 единицы для начала и 3 agruments для конца). Пожалуйста, предложите правильный способ решения этой проблемы.

Также, если мне нужно использовать аргумент по умолчанию для endBundle, как его использовать?

ответ

8

Вы могли бы сделать bundle шаблон:

template <typename T> 
struct bundle { 
    T a; 
    T b; 
    T c; 
}; 

void func(const bundle<int>& startBundle, const bundle<int>& endBundle); 

Или вы могли бы использовать std::array:

using IntBundle = std::array<int, 3>; 
using DoubleBundle = std::array<double, 3>; 
void func(const IntBundle& startBundle, const IntBundle& endBundle); 

Если вы хотите различные типы в одной связке, вы могли бы использовать std::tuple:

using IntBundle = std::tuple<int,int,int>; 
using OtherBundle = std::tuple<float,int,int>; 

Или сделать bundle взять три шаблонные аргументы:

template <typename A, typename B, typename C> 
struct bundle { 
    A a; 
    B b; 
    C c; 
}; 
+0

В случае станд :: массив , все 3 аргументы будут двойником, но мне нужно только 1-agrument быть в два раза. – aga

+0

@anujgupta А, я не понял этого. См. Мое редактирование. – TartanLlama

Смежные вопросы