#include <iostream>
#include <type_traits>
template <template <typename,unsigned,typename...>typename interface,typename T,unsigned ChannelN, typename...Args>
struct base : public interface<T,ChannelN,Args...>{
public:
using Scalar = T;
};
template<typename T, unsigned ChannelN,typename... ColourT>
struct I{
};
template <typename T,unsigned ChannelN>
struct Scalar : public base<I,T,ChannelN>
{
using DoubleT = double;
using Name= Scalar;
using base<I, T, ChannelN>::base;
};
int main()
{
std::cout<<std::is_same_v<typename Scalar<int,1>::Scalar,int>;
return 0;
}
我有一个类似于上面结构的大型代码,当我期望它为真时,代码返回 false,我认为 struct Scalar 中的
using Name = Scalar
和 struct base 中的 using Scalar = T
之间存在冲突。如何在不改变的情况下解决这个问题?将
using Scalar=T
更改为
using Name = Scalar
然后在使用
using Name= typename base<I,T,ChannelN>::Scalar; //changed this
的时候,使用上面修改后的
std::is_same_v
如下图:Name
工作演示//------------------------------------------------vvvv------>use Name instead of Scalar
std::cout<<std::is_same_v<typename Scalar<int,1>::Name,int>;
。