Add structure chain constructor which accepts a list of its elements (#217)

Add structure chain constructor which accepts a list of its elements
This commit is contained in:
Patrick Mours
2018-05-09 16:32:39 +02:00
committed by Markus Tavenrath
parent b075d67fbc
commit 437f800444
3 changed files with 55 additions and 2 deletions

View File

@@ -471,6 +471,11 @@ namespace VULKAN_HPP_NAMESPACE
linkAndCopy<StructureElements...>(rhs);
}
StructureChain(StructureElements const &... elems)
{
linkAndCopyElements<StructureElements...>(elems...);
}
StructureChain& operator=(StructureChain const &rhs)
{
linkAndCopy<StructureElements...>(rhs);
@@ -512,7 +517,24 @@ namespace VULKAN_HPP_NAMESPACE
linkAndCopy<Y, Z...>(rhs);
}
};
template<typename X>
void linkAndCopyElements(X const &xelem)
{
static_cast<X&>(*this) = xelem;
}
template<typename X, typename Y, typename ...Z>
void linkAndCopyElements(X const &xelem, Y const &yelem, Z const &... zelem)
{
static_assert(isStructureChainValid<X,Y>::value, "The structure chain is not valid!");
X& x = static_cast<X&>(*this);
Y& y = static_cast<Y&>(*this);
x = xelem;
x.pNext = &y;
linkAndCopyElements<Y, Z...>(yelem, zelem...);
}
};
enum class Result
{
eSuccess = VK_SUCCESS,