Параметры шаблона типа C ++, ссылка на * this

Я пытаюсь улучшить свою общую архитектуру, и я решил, что система, которая использует этот тип неоднозначной контекстной ссылки, будет идеальной для моих целей. Тем не менее, у меня возникают проблемы с выяснением, как заставить работать синтаксис. Я даже не знаю, возможно ли что-то подобное! У меня есть немного более застенчивые альтернативы, которые выполняют в основном то же самое, но это было бы лучше:

class IContained
{
public:
virtual int getInt() = 0;
};
typedef std::shared_ptr<IContained>IContainedPtr;

template<template<class RefType, RefType& itsRef> class ContainedType>
class TestClass
{
TestClass() :
myContained(new ContainedType < TestClass, *this>())
{

}

int getContextInt()
{
return 3;
}

IContainedPtr myContained;
};

template<class RefType, RefType& itsRef>
class Contained:
virtual public IContained
{

int getInt()
{
return itsRef.getContextInt();
}
};

TEST(POTATO, PARTY)
{
TestClass<Contained> myTest();

int thing = myTest.myContained->getInt();

EXPECT_EQ(thing, 3);
}

0

Решение

Я не уверен, что вы хотите реализовать, но я могу объяснить, почему вы не можете использовать

*this

в качестве аргумента шаблона. Шаблоны предоставляют вам полиморфизм во время компиляции. Это означает, что все аргументы шаблонов должны быть известны во время компиляции.

this

является переменной экземпляра класса, является адресом экземпляра класса, поэтому он не может быть определен во время компиляции. Такой же как

*this
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]