Совместное объединение в различии параметра типа:
public class Baz<T extends Foo & Bar> {}
, Например, если Вы хотели взять параметр, это и Сопоставимо и Набор:
public static <A, B extends Collection<A> & Comparable<B>>
boolean foo(B b1, B b2, A a) {
return (b1.compareTo(b2) == 0) || b1.contains(a) || b2.contains(a);
}
Этот изобретенный метод возвращает true, если два данных набора равны или если любой из них содержит данный элемент, иначе ложь. Точка для замечания - то, что можно вызвать методы и Сопоставимого и Набор на аргументах b1 и b2.
Используйте перегрузку с двумя аргументами:
many_things.resize (20, something (5));
Вы можете использовать reserve ()
, чтобы увеличить размер буфера и вручную добавить ( push_back ()
) необходимые элементы в цикл.
я могу придумать решение, но предупреждаю вас, это довольно некрасиво. Я не знаю, почему вы не хотите добавлять конструктор по умолчанию, но если вы просто хотите запретить пользователям этого класса создавать неализованные экземпляры, вы можете просто сделать конструктор по умолчанию закрытым и объявить соответствующий векторный класс своим другом:
class Foo {
public:
Foo( int x ) : num( x ) {}
int GetX( ) { return num; }
private:
friend class std::vector< Foo >;
int num;
Foo( ) : num( 10 ) {}
};
Это некрасиво по нескольким причинам, в основном потому, что работает только для одного типа контейнера. Другого пути нет, потому что контейнеры STL просто требуют, чтобы их элементы были конструктивными по умолчанию.
С подобной специализацией (извините, я написал это с минимальными проверками)?
#include <vector>
class MyClass
{
private:
MyClass();
public:
MyClass(unsigned i) : _data(i) {};
private:
unsigned _data;
};
typedef std::vector<MyClass> MyVector;
void MyVector::resize(MyVector::size_type new_size)
{
this->resize(new_size, MyClass(5));
}
int main()
{
MyVector vector;
vector.resize(5);
return 0;
}
Но подумайте, действительно ли вам это нужно. Почему бы вместо этого не создать конструктор по умолчанию?