Отказ от ответственности: Я отвечаю на вопрос в том виде, в котором он был задан, но если вы задаетесь вопросом, как этого добиться, то, скорее всего, что-то не так с вашим дизайном.
Краткий ответ: это нельзя сделать с помощью публичного наследства, полная остановка. Весь смысл общественного наследования заключается в том, что референс или указатель на объект из Derived
могут использоваться как ссылка или указатель на объект из Base
, независимо от контекста.
Таким образом, способ сделать это - пройти через частное наследование или переменную-член и открыть член Base
только через метод доступа, возвращающий ссылку или указатель const
:
#include <string>
struct Base
{
// Mutating method. Not a chance of making it virtual.
template <typename Anything>
Base& operator=(const Anything& x)
{
m_int = x.AsInteger();
return *this;
}
int AsInteger() const
{
return m_int;
}
int m_int;
};
struct Derived : private Base
{
template <typename Anything>
Derived& operator=(const Anything& x)
{
m_text = x.AsString();
Base::operator=(x);
return *this;
}
const std::string& AsString() const
{
return m_text;
}
const Base& base() const {return *this;}
// Invariant: Derived::m_text matches Base::m_x.
std::string m_text;
};
void ExamineBase(const Base* b)
{
b->AsInteger();
}
void ExamineBase(const Base& b)
{
b.AsInteger();
}
void InitBase(Base* b)
{
*b = Base();
}
void InitBase(Base& b)
{
b = Base();
}
int main()
{
Base b;
InitBase(b); // <----- (1)
InitBase(&b); // <----- (2)
Derived d;
Derived& ref = d;
Derived* ptr = &d;
ExamineBase(ref.base()); // <----- (3)
ExamineBase(&ptr->base()); // <----- (4)
InitBase(ref.base()); // <----- BOOM!
InitBase(&ptr->base()); // <----- BOOM!
return 0;
}
С чисто лингвистической точки зрения правильное использование - мьютексы , потому что слово мьютекс не имеет латинского происхождения. Прескриптивисты плакали бы от боли, если бы мутации вошли в обычное употребление.
Использование -ices (например, множественное число от index и vertex) ) впадает в немилость. Индексы и вершины являются правильным использованием, например.
Может это как овца? Единственное и множественное число?
Мьютексы. Де-факто это правильно - подавляющее большинство людей (по моему опыту, конечно) называют их мьютексами, а не мутиками, а английский - это язык, который определяется использованием. :)
У меня есть решение для этого, но я не уверен, почему это будет иначе из одной среды в другую - хотя одно большое различие между этими двумя средами заключается в том, что WSS svc pack 1 был установлен в среде, в которой произошла ошибка.
Чтобы исправить эту проблему, я получил хорошую подсказку по этой ссылке - http://silverlight.net/forums/t/22787.aspx т.е. «пожалуйста, проверьте XML-схему вашей службы» и «последовательность в схеме отсортирована по алфавиту»
Как мьютекс является сокращением от «взаимного исключения», я могу только представить, что «взаимные исключения» станут мьютексами . Мутисы могут сбивать с толку. Лучше быть недвусмысленным.
В качестве примечания: это не чемодан, иначе это была бы мутация .
официальной правильной формы не существует, потому что « mutex 'не получил достаточно широкого распространения, чтобы войти ни в один из основных английских словарей. Таким образом, наиболее правильный термин - это то, что люди чаще всего используют. И я думаю, что попадания в Google являются довольно хорошим индикатором (относительной) частоты использования, как указал great_lama .
Другие английские существительные, оканчивающиеся на -ex или ] -ix :
И еще много менее употребительных слов. Если вы посмотрите их в словаре, вы обнаружите, что в большинстве из них оба множественного числа показаны как допустимые. Некоторые из них имеют только форму -exes / -ixes , но немногие или ни одна (в зависимости от используемого словаря) имеют только форму -ices .
Либо / либо. Я видел и то, и другое (хотя мьютексы встречаются гораздо чаще).
Мьютексов нет ни в одном из известных мне настоящих словарей, поэтому нет никакого «официального ответа».
Индекс может быть множественным числом индексов или индексов, однако, так что логично, что мьютекс может последовать его примеру.
Я думаю, что истерическим изюмам (в данном случае тому факту, что «мьютекс» - это чемодан) не следует придавать слишком большое значение при решении таких проблем. Возможно, было бы полезнее рассмотреть похожие слова и их использование; рефлекс -> рефлексы, например.
Или используйте самый простой вариант: большинство множественных форм в английском используют -s / -es (в зависимости от того, является ли последняя буква воспринимаемой гласной); в данном случае -es.
Думаю, я не вижу никаких причин для использования этой альтернативы, кроме как своего рода дань уважения латыни, которая когда-то считалась благороднейшим из всех языков. :)
Поскольку слово вершина может иметь множественное число как вершины или apices , я бы сказал, что вы можете произнести это либо мьютексы , либо муты . Все, что вам подходит.